本期推荐的是一个集成Alipay和WeChat的PHP支付SDK扩展包——Pay。
Pay集成了支付宝、微信的最新API,符合最新的PSR标准,使用少量代码就可集成到其他框架中,无惧束缚。
hyperf 扩展包:
https://github.com/yansongda/hyperf-pay
laravel 扩展包:
https://github.com/yansongda/laravel-pay
yii 扩展包:
https://github.com/guanguans/yii-pay
功能特性
- 多租户支持
- Swoole 支持
- 灵活的插件机制
- 丰富的事件系统
- 命名不那么乱七八糟
- 隐藏开发者不需要关注的细节
- 根据支付宝、微信最新 API 开发而成
- 高度抽象的类,免去各种拼json与xml的痛苦
- 文件结构清晰易理解,可以随心所欲添加本项目中没有的支付网关
- 方法使用更优雅,不必再去研究那些奇怪的的方法名或者类名是做啥用的
- 内置自动获取微信公共证书方法,再也不用再费劲去考虑第一次获取证书的的问题了
- 符合 PSR2、PSR3、PSR4、PSR7、PSR11、PSR14 等各项标准,你可以各种方便与你的框架集成
快速安装
运行环境
- PHP 7.3+
- composer
安装方式
composer require yansongda/pay:~3.0.0 -vvv
初始化
方式一:
直接调用 config 方法初始化
Pay::config($config);
如果需要强制初始化覆盖配置信息
Pay::config(array_merge($config, ['_force' => true]));
方式二:
在每次实际调用时顺便初始化
Pay::alipay($config)->web($order);
如果需要强制初始化覆盖配置信息
Pay::alipay(array_merge($config, ['_force' => true]))->web($order);
使用示例
- 支付宝
网页支付
Pay::config($this->config);
return Pay::alipay()->web([
'out_trade_no' => ''.time(),
'total_amount' => '0.01',
'subject' => 'yansongda 测试 - 1',
]);
H5支付
Pay::config($this->config);
return Pay::alipay()->wap([
'out_trade_no' => time(),
'total_amount' => '0.01',
'subject' => 'yansongda 测试 - 01',
'quit_url' => 'https://yansongda.cn',
]);
APP支付
Pay::config($this->config);
return Pay::alipay()->app([
'out_trade_no' => time(),
'total_amount' => '0.01',
'subject' => 'yansongda 测试 - 01',
]);
小程序支付
Pay::config($this->config);
$result = Pay::alipay()->mini([
'out_trade_no' => time().'',
'total_amount' => '0.01',
'subject' => 'yansongda 测试 - 01',
'buyer_id' => '2088622190161234',
]);
return $result->get('trade_no'); // 支付宝交易号
// return $result->trade_no;
- 微信
公众号支付
Pay::config($config);
$order = [
'out_trade_no' => time().'',
'description' => 'subject-测试',
'amount' => [
'total' => 1,
],
'payer' => [
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
],
];
$result = Pay::wechat()->mp($order);
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
手机网站支付
Pay::config($config);
$order = [
'out_trade_no' => time().'',
'description' => 'subject-测试',
'amount' => [
'total' => 1,
],
'scene_info' => [
'payer_client_ip' => '1.2.4.8',
'h5_info' => [
'type' => 'Wap',
]
],
];
return Pay::wechat()->wap($order);
扫码支付
Pay::config($config);
$order = [
'out_trade_no' => time().'',
'description' => 'subject-测试',
'amount' => [
'total' => 1,
],
];
$result = Pay::wechat()->scan($order);
// 二维码内容: $qr = $result->code_url;
小程序
Pay::config($config);
$order = [
'out_trade_no' => time().'',
'description' => 'subject-测试',
'amount' => [
'total' => 1,
'currency' => 'CNY',
],
'payer' => [
'openid' => '123fsdf234',
]
];
$result = Pay::wechat()->mini($order);
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
此项目使用MIT开源协议,更多内容大家可自行前往阅读。