一、插件路径
支付插件位于@shopwind/common/plugins/payment目录下,该目录下的每一个文件夹代表一个具体的插件实例。
alipay/ 表示 支付宝支付,兼容电脑支付、手机支付、APP支付
wxpay/ 表示 微信支付,兼容公众号支付、扫码支付、H5支付
wxapppay/ 表示 APP客户端(android/iOS)下的微信支付
wxmppay/ 表示 微信小程序支付
deposit/ 表示余额支付
unionpay/ 表示 中国银联支付(兼容PC和H5)
cod/ 表示 货到付款支付
二、编写要点
所有支付插件,我们都应该实现以下几个主要方法:获取支付表单、支付返回地址、支付通知地址、验证回调结果、验证签名、支付应答。
这些方法我们编写到插件主程序@shopwind/common/plugins/payment/插件名/插件名.plugin.php文件中:
// 提交支付,入参 $orderInfo 为订单信息
public function pay(&$orderInfo = array()) {}
// 原路退款
public function refund($orderInfo = array()) {}
// 支付返回地址(缺省情况下调用父类返回地址),入参 $payTradeNo 为支付交易号
public function createReturnUrl($payTradeNo = '') {}
// 支付通知地址,入参 $payTradeNo 为支付交易号
public function createNotifyUrl($payTradeNo = '') {}
// 获取异步通知数据(可缺省)
public function getNotify() {}
// 验证回调结果,入参 $orderInfo 为订单信息,$strict 是否验证签名
public function verifyNotify($orderInfo, $strict = false) {}
// 验证签名,入参 $notify 为异步通知数据,$strict 是否验证签名
private function verifySign($notify, $strict = false) {}
// 支付应答,入参 $result 是否支付成功
public function verifyResult($result = false) {}
实现以上方法就完成了一个支付插件编写的一大半,剩下的事情,都由系统来完成。具体实现代码应根据不同的支付而有所不同,建议大家在编写代码的时候,尽量多参考现有插件的代码实例,可以让您起到事半功倍的效果。
在缺省的情况下,即没有配置createReturnUrl()返回地址的情况下,统一由控制器PaynotifyController的index方法来处理,而通知地址不建议缺省 ,不同的支付插件,应在控制器PaynotifyController下配置不同的操作方法来处理,具体参考文件:
@shopwind/frontend/controllers/PaynotifyController.php
通过本节的学习,大家应该能掌握了支付插件的编写要点,如果对此还有疑问,可以进入我们官方的
开发者社区反馈,我们会有官方技术人员在线解答。