## 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命名,以符合開發者的編程直覺。