支付插件
本章节主要是介绍,ShopWind系统现有的支付插件说明,以及编写一个支付插件的实施要点和注意事项。本章节的内容建立在您已经熟悉《插件规范》的基础之上。如不熟悉,请先阅读上一章节内容。
一、插件路径
支付插件位于@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()返回地址的情况下,统一由控制器PaynotifyControllerindex方法来处理,而通知地址不建议缺省 ,不同的支付插件,应在控制器PaynotifyController下配置不同的操作方法来处理,具体参考文件:

@shopwind\frontend\api\controllers\PaynotifyController.php
通过本节的学习,大家应该能掌握了支付插件的编写要点,如果对此还有疑问,可以进入我们官方的 开发者社区反馈,我们会有官方技术人员在线解答。