## Alipay**Easy**SDK for PHP
欢迎使用 Alipay**Easy**SDK。
打造**最好用**的支付宝开放平台**服务端SDK**,Alipay Easy SDK让您享受**极简编程**体验,快速访问支付宝开放平台开放的各项**核心能力**。
## [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E8%AE%BE%E8%AE%A1%E7%90%86%E5%BF%B5)设计理念
不同于原有的Alipay SDK通用而全面的设计理念,Alipay Easy SDK对开放能力的API进行了更加贴近高频场景的精心设计与裁剪,简化了服务端调用方式,让调用API像使用语言内置的函数一样简便。
同时,您也不必担心面向高频场景提炼的API可能无法完全契合自己的个性化场景,Alipay Easy SDK支持灵活的[动态扩展](https://github.com/alipay/alipay-easysdk/blob/master/README.md#extension)方式,同样可以满足低频参数、低频API的使用需求。
Alipay Easy SDK提供了与[能力地图](https://opendocs.alipay.com/mini/00am3f)相对应的代码组织结构,让开发者可以快速找到不同能力对应的API。
Alipay Easy SDK主要目标是提升开发者在**服务端**集成支付宝开放平台开放的各类核心能力的效率。
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E5%8C%96%E7%B9%81%E4%B8%BA%E7%AE%80)化繁为简
| Alipay Easy SDK | Alipay SDK |
| --- | --- |
| 极简代码风格,更贴近自然语言阅读习惯 | 传统代码风格,需要多行代码完成一个接口的调用 |
| Factory单例全局任何地方都可直接引用 | AlipayClient实例需自行创建并在上下文中传递 |
| API中只保留高频场景下的必备参数,同时提供低频可选参数的装配能力 | 没有区分高低频参数,单API最多可达数十个入参,对普通开发者的干扰较大 |
* Alipay Easy SDK😃
~~~java
Factory.Payment.Common().create("Iphone6 16G", "202003019443", "0.10", "2088002656718920");
~~~
* Alipay SDK😕
~~~java
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
AlipayTradeCreateModel model = new AlipayTradeCreateModel();
model.setSubject("Iphone6 16G");
model.setOutTradeNo("202003019443");
model.setTotalAmount("0.10");
model.setBuyerId("2088002656718920");
...
request.setBizModel(model);
...
alipayClient.execute(request);
~~~
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E5%A6%82%E4%BD%95%E5%88%87%E6%8D%A2)如何切换
* 无论是Alipay Easy SDK还是Alipay SDK,本质都是发送HTTP请求访问Open API网关,所以只需将原来通过Alipay SDK调用Open API的代码,替换为Alipay Easy SDK中对应API的调用即可。Alipay Easy SDK和Alipay SDK并无冲突,可以共存。
* 如果您所需对接的开放平台能力,Alipay Easy SDK尚未提炼出API支持([已支持的API列表](https://github.com/alipay/alipay-easysdk/blob/master/README.md#apiList)),您可以通过[通用接口](https://github.com/alipay/alipay-easysdk/blob/master/APIDoc.md#generic)完成调用。
* 我们会持续挖掘高频场景,不断丰富Alipay Easy SDK支持的API,让您在绝大多数常见场景下,都能享受Alipay Easy SDK带来的便捷。
## [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E6%8A%80%E6%9C%AF%E7%89%B9%E7%82%B9)技术特点
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E7%BA%AF%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91)纯语言开发
所有Alipay Easy SDK的具体编程语言的实现,均只采用纯编程语言进行开发,不引入任何重量级框架,减少潜在的框架冲突,让SDK可以自由集成进任何代码环境中。
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E7%BB%93%E6%9E%84%E6%B8%85%E6%99%B0)结构清晰
我们按照能力类别和场景类别对API进行了归类,结构更加清晰,一目了然。
> 更多信息请参见[API组织规范](https://github.com/alipay/alipay-easysdk/blob/master/README.md#spec)。
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E5%8F%82%E6%95%B0%E7%B2%BE%E7%AE%80)参数精简
Alipay Easy SDK对每个API都精心打磨,剔除了`Open API`中不常用的可选参数,减少普通用户的无效选择,提升开发效率。
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E7%81%B5%E6%B4%BB%E6%89%A9%E5%B1%95)灵活扩展
开发者可以通过Fluent风格的API链式调用,在为高频场景打造的API基础上,不断扩展自己的个性化场景需求。
~~~java
// 通过调用agent方法,扩展支持ISV代调用场景
Factory.Payment.FaceToFace().agent("ca34ea491e7146cc87d25fca24c4cD11").preCreate(...)
// 通过调用optional方法,扩展支持个性化可选参数
Factory.Payment.FaceToFace().optional("extend_params", extendParams).preCreate(...)
// 多种扩展可灵活搭配,不同扩展方法功能详细说明请前往各语言主页中的“快速开始-扩展调用”栏目中查看
Factory.Payment.FaceToFace()
.agent(...)
.optionalArgs(...)
.auth(...)
.asyncNotify(...)
.preCreate(...)
~~~
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E6%B5%8B%E8%AF%95%E7%A4%BA%E4%BE%8B%E5%AE%8C%E5%A4%87)测试/示例完备
每个API都有对应的单元测试进行覆盖,良好的单元测试天生就是最好的示例。
同时您也可以前往[API Doc](https://github.com/alipay/alipay-easysdk/blob/master/APIDoc.md)查看每个API的详细使用说明。
> 注:单元测试中使用到的私钥均进行了脱敏处理,会导致单元测试无法直接执行。您可以自行更改单元测试项目中的`TestAccout类`和`privateKey.json`文件中的相关账号与私钥配置后再执行单元测试。
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E5%A4%9A%E8%AF%AD%E8%A8%80)多语言
Alipay Easy SDK基于阿里集团研发的[`Darabonba`](https://github.com/aliyun/darabonba)进行架构,通过DSL中间语言定义API模型,再基于DSL语言自动生成不同编程语言(Java、C#、PHP、TS等)实现的SDK,极大地提升了SDK能力的扩展效率和适用范围,同时也保证了相同的`Easy API`在不同语言生态中体验的一致性。
API模型的DSL描述可以进入[tea](https://github.com/alipay/alipay-easysdk/blob/master/tea)目录查看。
### [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90)快速集成
各语言SDK均会在各自的中央仓库(Maven、NuGet、Composer、NPM etc.)中同步发布,让您使用各语言主流依赖管理工具即可一键安装集成SDK。
## [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#%E8%AF%AD%E8%A8%80%E6%94%AF%E6%8C%81%E6%83%85%E5%86%B5)语言支持情况
Alipay Easy SDK首发暂只支持`Java`、`C#`、`PHP`编程语言,更多编程语言支持正在积极新增中,敬请期待。
各语言具体的**使用说明**和**详细介绍**请点击如下链接进入各语言主目录查看。
[Java](https://github.com/alipay/alipay-easysdk/blob/master/java)
[C#](https://github.com/alipay/alipay-easysdk/blob/master/csharp)
[PHP](https://github.com/alipay/alipay-easysdk/blob/master/php)
## [](https://github.com/alipay/alipay-easysdk/blob/master/README.md#api%E7%BB%84%E7%BB%87%E8%A7%84%E8%8C%83)API组织规范
在Alipay Easy SDK中,API的引用路径与能力地图的组织层次一致,遵循如下规范
> Factory.能力类别.场景类别.接口方法名称( ... )
比如,如果您想要使用[能力地图](https://opendocs.alipay.com/mini/00am3f)中`营销能力`下的`模板消息`场景中的`小程序发送模板消息`,只需按如下形式编写调用代码即可(不同编程语言的连接符号可能不同)。
`Factory.Marketing.TemplateMessage().send( ... )`
其中,接口方法名称通常是对其依赖的OpenAPI功能的一个最简概况,接口方法的出入参与OpenAPI中同名参数含义一致,可参照OpenAPI相关参数的使用说明。
Alipay Easy SDK将致力于保持良好的API命名,以符合开发者的编程直觉。