piuio / pay
dev-master
2018-11-06 10:48 UTC
Requires
- php: >=7.1
- guzzlehttp/guzzle: ^6.3
- symfony/options-resolver: ^4.0
- wangjian/pingan_pay: ^0.2.5
Requires (Dev)
- phpunit/phpunit: ^5.0
This package is not auto-updated.
Last update: 2024-09-24 20:46:30 UTC
README
文档
支持网关
介绍
在对接第三方支付时,尤其是需要对接多个第三方支付时,需要阅读第三方文档然后花费大量时间拼装和调试参数,例如调用第三方下单创建支付,如果需要同时接入微信和支付宝支付,那么就需要收集文档,可想而知是非常麻烦的(其实还好.. hhh..)。
这个组件提供的将与第三方通信分为三部分
- request, 请求,主动调用第三方
- response, 响应,主动调用第三方获得的响应
- notification, 通知,第三方的各类通知
而每部分又细分为不同的动作,每个动作绑定一个固定的表单 (Form),每个表单的内容是固定的。
例如主动调用第三方下单创建支付 (ChargeRequest),他使用的表单是 ChargeRequestForm。填写好表单后,传入组件,即可由组件加工好参数并调用第三方支付。
这样就能做到,只需要了解组件的表单内容,就可以接入多个第三方支付,一劳永逸(不存在的 hhh)。
使用
这里以支付宝 PC 网站支付为例,如果需要使用其他的支付网关,只需要修改实例化 Cashier 时传入的 $gateway 即可。
注意,组件使用的基本货币单位是 分。
<?php use PiuIO\Pay\Cashier; // 按格式组装好配置 $config = [ 'app_id' => 'xxxx', 'app_private_key' => 'xxxxx', 'alipay_public_key' => 'xxxxx', ]; // 创建实例, 传入要使用的 Gateway $cashier = new Cashier('alipay_web', $config);
创建付款
<?php // 组装 ChargeRequestForm $data = [ 'order_id' => '151627101400000071', 'subject' => 'testing', 'amount' => 1, 'currency' => 'CNY', 'description' => 'testing description', 'return_url' => 'https://pay.piu.io/callback', 'expired_at' => '2018-01-23 19:00:00', ]; $form = $cashier->charge($data); // 以 laravel 为例 return redirect($form->get('charge_url'));
查询支付
<?php $form = $cashier->query([ 'order_id' => '151627101400000071', ]); var_dump('paid' === $form->get('status'));
接收通知
<?php $form = $cashier->notify('charge'); var_dump('paid' === $form->get('status')); var_dump($form->get('trade_sn')); // 取得第三方交易号
退款
<?php $form = $cashier->refund([ 'order_id' => '151627101400000071', 'refund_id' => '3151627101400000071', 'total_amount' => 1, 'refund_amount' => 1, ]);
表单及字段说明
ChargeRequestForm
其他依旧待补充...
常见问题解答
Q: 相比其他的 sdk 优点在哪 ?
A: 无论标榜多优雅多好用的 sdk,大多都是要求你按照第三方的参数名传入参数,那就免不了要看文档,免不了在代码里要做很多处理。我想要的是,从数据库里取出订单后,做一遍处理就能解决接入多种支付。
Q: 是不是就完全不必看第三方支付的文档了 ?
A: 并不是,我建议还是需要看,并且组件中某些支付(例如微信公众号)是需要传入一些特殊参数的。组件只是帮你解决烦心的调用问题。
许可证
MIT