nizerin / alipay-sdk
支付宝(蚂蚁金服)开放平台第三方 PHP SDK,基于官方 3.3.1 版本。
Requires
- php: >=5.4
- ext-openssl: *
Requires (Dev)
- phpunit/phpunit: >=4.8
- vlucas/phpdotenv: ^2.5
This package is auto-updated.
Last update: 2024-10-24 15:06:42 UTC
README
🐜 支付宝开放平台(又称:蚂蚁金服开放平台)第三方 PHP SDK,基于官方 3.3.1 版本。
❤️ 本项目 GitHub ,目前已在公司产品应用,运行在数百台客户服务器内。
为什么不用官方
主要目的
- 集成 Composer。
- 降低 PHP 依赖至 5.4。
- 移除官方 SDK 内
lotusphp
依赖。 - 整理代码风格使其符合
PSR-1
、PSR-2
。 - 增加单元测试。
- 兼容 PHP 7.2,
替换 MCrypt 为 OpenSSL。 - 移除官方 API 文档内
已弃用
特性。 - 移除难以拓展的调试、日志等特性,以便于集成第三方框架和扩展包。
- 移除编码转换特性,统一使用
UTF-8
。 - 其它优化,持续进行中 ...
目前,开源圈内已有不少质量不错的支付宝「支付」相关扩展包;而支付宝「小程序」推出不久,目前仍处于公测阶段。此项目的初衷并不是 Yet another
,而是填补小程序 API 的空缺,文档和示例也将会有所侧重。
小试牛刀
如何使用
-
Composer 安装。
composer require nizerin/alipay-sdk:
Composer 中国镜像近期处于维护状态;若无法安装,建议使用原版 Packagist 或使用 Laravel-China 镜像。
-
创建
AlipayKeyPair
实例。$keyPair = \Alipay\Key\AlipayKeyPair::create( '应用私钥', '支付宝公钥', );
AlipayKeyPair
用于存储应用私钥、支付宝公钥;两份密钥将分别用于与支付宝服务器通信时,生成请求签名、验证响应签名等。 -
创建
AopClient
实例。$aop = new \Alipay\AopClient('APP_ID', $keyPair);
AopClient
通常情况会贯穿整条业务,除非你须要在同一套代码内处理多个商户号/小程序,否则只需在初始化阶段创建一次即可。 -
根据业务需要,创建
AlipayRequest
实例。$request = (new \Alipay\AlipayRequestFactory)->create('点号连接的API名称', [ '请求参数名' => '对应参数值', // ... ]);
另外,你也可以不使用请求类工厂,就像官方文档那样,手动创建请求类。
例如:
$request = new \Alipay\Request\AlipaySystemOauthTokenRequest(); $request->setCode('authcode');
-
发送请求,获得响应数据。
$result = $aop->execute($request)->getData();
所有错误(包括但不限于网络通信异常、数据格式异常、支付宝服务器返回的错误)都会被转换为异常,请注意捕捉。
-
更多实例,请移步
examples
目录。最后,官方 SDK 内
AopClient::pageExecute()
被分离为pageExecuteUrl
和pageExecuteForm
。AopClient::sdkExecute()
和AopClient::execute()
方法名保持不变,参数和返回值有所改动。
注意事项
- 请不要依赖任何在官方 SDK 内被标注为
private
的属性,它们可能已在迭代中被修改或废弃。 - 请不要依赖任何在官方 API 文档内被标注为
已废弃
的特性,它们可能已在迭代中被废弃或移除。 - 本 SDK 只适用于目前正在开发或即将开始开发的项目;由于将会采取相对激进的态度开发,所以请勿尝试将原有代码迁移至本 SDK。
- 本 SDK 已移除所有编码转换特性;请确保执行上传文件请求时,文件编码为
UTF-8
而非GBK
。
实用工具
其它资源
已知 Issue
OpenSSL 在 Win32 平台需要配置 openssl.cnf
路径,参见 OpenSSL 安装 - PHP 手册。
在本 SDK 内,也可通过自定义 $configargs
参数来自定义此文件路径,而不需要配置环境变量;参见 examples/keys/generate.php。
目前已知以下方法依赖于此配置文件:
- 生成密钥对:
AlipayKeyPair::generate()
- 将私钥资源转换为字符串:
AlipayPrivateKey::toString()
感谢
感想
最后,一点感想。
作为一个名不见经传的小白,不敢妄言阿里的工程师技术欠佳;但可以确定的是,官方提供的 PHP SDK 绝对不是用心之作。
做开放平台,对待第三方开发者是这样的态度,怎能做到与微信比肩?
硬广,欢迎关注我们的产品: