bobcoders9 / cashier
1.0.0
2022-09-04 09:16 UTC
Requires
- php: >=7.2
- guzzlehttp/guzzle: ^7.0
- symfony/options-resolver: ^4.0
Requires (Dev)
- phpunit/phpunit: ^5.0
This package is auto-updated.
Last update: 2024-09-04 13:28:39 UTC
README
支持网关
介绍
在对接第三方支付时,尤其是需要对接多个第三方支付时,需要阅读第三方文档,然后花费大量时间拼装和调试参数,例如调用第三方下单创建支付,如果需要同时接入微信和支付宝支付,那么就需要收集文档,可以想象是非常麻烦的(其实还好.. hhh..)。
这个组件提供的将与第三方通信分为三部分
- request,请求,主动调用第三方
- response,响应,主动调用第三方获得的响应
- notification,通知,第三方的各类通知
而每部分又分为不同的动作,每个动作绑定一个固定的表单(Form),每个表单的内容是固定的。
例如主动调用第三方下单创建支付(ChargeRequest),他使用的表单是 ChargeRequestForm
。填写好表单后,传入组件,即可由组件加工好参数并调用第三方支付。
这样就能做到,只需要了解组件的表单内容,就可以接入多个第三方支付,一劳永逸(不存在的 hhh)。
使用
这里以支付宝PC网站支付为例,如果需要使用其他的支付网关,只需要修改实例化 Cashier
时传入的 $gateway
即可。
注意,组件使用的基本货币单位是分。
<?php use BobCoderS9\Cashier\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://www.baidu.com', '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