Stars: 207
Forks: 51
Pull Requests: 8
Issues: 22
Watchers: 9
Last Updated: 2022-10-29 09:29:09
🐜支付宝(蚂蚁金服)开放平台第三方 PHP SDK,基于官方最新版本。
License: MIT License
Languages: PHP, Shell
Alipay SDK for PHP🐜 支付宝开放平台(又称:蚂蚁金服开放平台)第三方 PHP SDK,基于官方最新版本。
| 官方 SDK | 本 SDK | 链接 |
|---|---|---|
无 Composer 集成,自动加载依赖第三方 PHP 框架 lotusphp |
集成 | |
| 代码不严谨,各种 Warning | 持续构建,Notice 也不放过 | |
| 零单元测试 | 99% 测试覆盖率 | |
| 代码风格、命名风格鱼龙混杂 | PSR1 + PSR2 | |
| 几乎零 PHPDoc | 持续补充中 | 对比图 |
| 异常和错误处理不统一 | 所有错误都将以异常的形式抛出,确保返回数据可靠 | Exceptions |
| 需手动根据接口名拼接请求类名 | 请求类工厂,根据 API 名直接创建请求类 | AlipayRequestFactory |
| 耦合度高,难以升级或替换 | 几乎完全解耦,任意替换签名 / 密钥 / 响应 甚至 HTTP 客户端 | AopClient |
PSR-1、PSR-2。已弃用 特性。UTF-8。Composer 安装。
composer require abbotton/alipay-sdk创建 AlipayKeyPair 实例。
// 通过密钥文件创建(推荐)
$keyPair = \Alipay\Key\AlipayKeyPair::create(
__DIR__ . '/private.pem',
__DIR__ . '/public.pem'
);
// 通过密钥字符串创建
$privateKey = '-----BEGIN RSA PRIVATE KEY-----
// ......
kXTZhB4nQqZXWFu8R+RdqC6gTh9k2dDz0NlibYSW9xApWRN572M9/n737110Yxa2
JZX27eBHLqR8aCZcXkADRpe9+yAL9SqErEOMh26nWFtwP5ZugHRf
-----END RSA PRIVATE KEY-----';
$publicKey = '-----BEGIN PUBLIC KEY-----
// ......
C9ykBV6BfujeeVQ2wUdpxFtI4gW8A4rgqecMvbL/KngU+aChG+W6SGXD8QY0fC4d
4QIDAQAB
-----END PUBLIC KEY-----';
$keyPair = \Alipay\Key\AlipayKeyPair::create($privateKey, $publicKey);AlipayKeyPair 用于存储应用私钥、支付宝公钥;两份密钥将分别用于与支付宝服务器通信时,生成请求签名、验证响应签名等。
创建 AopClient 实例。
$aop = new \Alipay\AopClient('APP_ID', $keyPair);AopClient 通常情况会贯穿整条业务,除非你须要在同一套代码内处理多个商户号/小程序,否则只需在初始化阶段创建一次即可。
根据业务需要,创建 AlipayRequest 实例。
$bizContent = [
'start_time' => '2021-08-01 00:00:00',
'end_time' => '2021-08-31 23:59:59',
'type' => 'TRANSFER',
'page_no' => 1
];
// 通过工厂类创建
$request = (new \Alipay\AlipayRequestFactory)->create('alipay.data.bill.transfer.query', [
'biz_content' => $bizContent,
// ...
]);
// 直接创建
$request = (new \Alipay\Request\AlipayRequest())
->setApiMethodName('alipay.data.bill.transfer.query')
->setBizContent($bizContent);发送请求,获得响应数据。
$result = $aop->execute($request)->getData();所有错误(包括但不限于网络通信异常、数据格式异常、支付宝服务器返回的错误)都会被转换为异常,请注意捕捉。
更多实例,请移步 examples 目录。
最后,官方 SDK 内 AopClient::pageExecute() 被分离为 pageExecuteUrl 和 pageExecuteForm。
AopClient::sdkExecute() 和 AopClient::execute() 方法名保持不变,参数和返回值有所改动。
private 的属性,它们可能已在迭代中被修改或废弃。已废弃 的特性,它们可能已在迭代中被废弃或移除。UTF-8 而非 GBK。OpenSSL 在 Win32 平台需要配置 openssl.cnf 路径,参见 OpenSSL 安装 - PHP 手册。
在本 SDK 内,也可通过自定义 $configargs 参数来自定义此文件路径,而不需要配置环境变量;参见 examples/keys/generate.php。
目前已知以下方法依赖于此配置文件:
AlipayKeyPair::generate()AlipayPrivateKey::toString()