摘要:支持名称网关支持动作支持回调备注支付宝支付支付支付查询退款支付支付宝扫码支付支付支付查询退款支付支付宝手机网站支付支付支付查询退款支付支付宝网站支付支付支付查询退款支付微信支付支付支付查询退款退款查询支付通知退款通知微信支付支付支付查询退款
GitHub
https://github.com/RunnerLee/...
支持名称 | 网关 | 支持动作 | 支持回调 | 备注 |
---|---|---|---|---|
alipay_app | 支付宝 APP 支付 | 支付/支付查询/退款 | 支付 | |
alipay_qr | 支付宝扫码支付 | 支付/支付查询/退款 | 支付 | |
alipay_wap | 支付宝手机网站支付 | 支付/支付查询/退款 | 支付 | |
alipay_web | 支付宝 PC 网站支付 | 支付/支付查询/退款 | 支付 | |
wechat_app | 微信 APP 支付 | 支付/支付查询/退款/退款查询 | 支付通知/退款通知 | |
wechat_h5 | 微信 H5 支付 | 支付/支付查询/退款/退款查询 | 支付通知/退款通知 | 内置抓取付款链接功能 |
wechat_mina | 微信小程序支付 | 支付/支付查询/退款/退款查询 | 支付通知/退款通知 | |
wechat_official | 微信公众号支付 | 支付/支付查询/退款/退款查询 | 支付通知/退款通知 | |
wechat_qr | 微信扫码支付 | 支付/支付查询/退款/退款查询 | 支付通知/退款通知 | |
union_web | 银联网页支付 | 支付/支付查询 | 支付通知 | 较旧版本 |
union_app | 银联网页支付 | 支付 | 支付通知 | 较旧版本 |
paypal_express_checkout | PayPal 快速结账 | 支付/支付查询 | 支付通知 | 不稳定 |
在对接第三方支付中, 尤其是需要对接多个第三方支付时, 需要阅读第三方文档然后花费大量时间拼装和调试参数, 例如调用第三方下单创建支付, 如果需要同时接入微信跟支付宝支付, 那么就需要收集文档, 可想而知是非常麻烦的(其实还好.. hhh..).
这个组件提供的把与第三方通信分为三部分:
request, 请求, 主动调用第三方
response, 响应, 主动调用第三方获得的响应
notification, 通知, 第三方的各类通知
而每部分又部分为不同的动作, 每个动作绑定一个固定的表单 (Form), 每个表单的内容是固定的.
例如主动调用第三方下单创建支付 (ChargeRequest), 他使用的表单是 ChargeRequestForm. 填写好表单后, 传入组件, 即可由组件加工好参数并调用第三方支付.
这样就能做到, 只需要了解组件的表单内容, 就可以接入多个第三方支付, 一劳永逸 (不存在的 hhh).
使用这里以支付宝 PC 网站支付为例, 如果需要使用其他的支付网关, 只需要修改实例化 Cashier 时传入的 $gateway 即可.
注意, 组件使用的基本货币单位是 分.
"xxxx", "app_private_key" => "xxxxx", "alipay_public_key" => "xxxxx", ]; // 创建实例, 传入要使用的 Gateway $cashier = new Cashier("alipay_web", $config);
创建付款
"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"));
查询支付
query([ "order_id" => "151627101400000071", ]); var_dump("paid" === $form->get("status"));
接收通知
notify("charge"); var_dump("paid" === $form->get("status")); var_dump($form->get("trade_sn")); // 取得第三方交易号
退款
refund([ "order_id" => "151627101400000071", "refund_id" => "3151627101400000071", "total_amount" => 1, "refund_amount" => 1, ]);表单及字段说明 ChargeRequestForm
字段名 | 是否必须 | 字段说明 | 备注 |
---|---|---|---|
order_id | 是 | 订单号 | |
subject | 是 | 订单标题 | |
amount | 是 | 订单金额 | 注意部分支付渠道有金额上线限制 |
currency | 是 | 订单货币 | 注意支付渠道支付 |
description | 是 | 订单简述 | 支付渠道会有不同的长度限制 |
user_ip | 否 | 用户IP | |
return_url | 否 | 回调地址 | web类型的支付渠道必须填 |
show_url | 否 | 展示地址 | |
body | 否 | 订单详细说明 | 这个参数我应该删掉 |
expired_at | 否 | 过期时间 | unix 时间戳 |
created_at | 否 | 创建时间 | unix 时间戳, 想不到吧, 连这个鬼都要?? |
其他依旧待补充...
FAQQ: 相比其他的 sdk 优点在哪 ?
A: 无论标榜多优雅多好用的 sdk, 大多都是要求你按照第三方的参数名传入参数, 那就免不了要看文档, 免不了在代码里要做很多处理. 我想要的是, 从数据库里取出订单后, 做一遍处理就能解决接入多种支付.
Q: 是不是就完全不必看第三方支付的文档了 ?
A: 并不是, 我建议还是需要看, 并且组件中某些支付 (例如微信公众号) 是需要传入一些特殊参数的. 组件只是帮你解决烦心的调用问题.
LicenseMIT
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28700.html
摘要:几个月之内就开发了几十款小程序的开发者陈林,有着自己的解答。资深小程序开发者陈林,是小程序风口下的探索者之一,借助小程序无需安装,易于传播的特点,陈林以小游戏类目为核心,配合小程序间可相互跳转的特性。 showImg(https://segmentfault.com/img/remote/1460000020165110);你是一条产品经理,现在要出一个大型需求的方案,你会怎么做? ...
摘要:本文是浅析微信支付系列文章的第十五篇,主要讲解如何开通免充值产品功能流程和其中的注意事项,对于接口升级会重要讲解,避免爬坑。 本文是【浅析微信支付】系列文章的第十五篇,主要讲解如何开通免充值产品功能流程和其中的注意事项,对于接口升级会重要讲解,避免爬坑。 浅析微信支付系列已经更新十五篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付:商户平台代金券或立减优惠开通、指定用户代金券发...
摘要:相比起来,支付宝的下单动作由于是在前端调用的,因此,站点需要将自己的订单信息返回到客户端,然后又客户端发起调用支付宝的下单接口,这样一来,如果安全加密等做的不到位,很容易被恶意用户篡改信息。 作为一个具备用户交易能力的网站,丰富它的支付渠道对于获客和提高日活都有不可估量的积极作用。算起来,我接触过的支付系统也有几十个了,在这里总结一下我所接触过的支付系统对外接口的设计方案。 1. 支付...
摘要:而适配器其实在中应该是比较常见的一种了。在维基百科中,关于适配器模式的定义为在软件工程中,适配器模式是一种软件设计模式,允许从另一个接口使用现有类的接口。 适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题、整合多个第三方SDK的调用,都可以看到它的身影。 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就是老前辈们总结提炼出来的一些能...
阅读 2730·2021-10-14 09:42
阅读 3580·2021-10-11 10:59
阅读 2914·2019-08-30 11:25
阅读 3047·2019-08-29 16:25
阅读 3186·2019-08-26 17:40
阅读 1167·2019-08-26 13:30
阅读 1103·2019-08-26 11:46
阅读 1305·2019-08-23 15:22