微信小程序支付最多关联多少个三方商户
50 个。
https://developers.weixin.qq.com/community/develop/doc/000a0a92e50360b6554aa165b5a400
获取微信商户的 MchID(商户 id)和 MchKey(商户密钥)
- MchID(商户 id)左侧菜单里的商户信息里查找
- MchKey(商户密钥)左侧菜单里的 API 安全里生成,共 32 位
微信支付 golang 库
最新的是 V3 版本。
官方提供了 golang 版本的库,良心。。。(官方同时提供了 java, php, golang 三种语言)
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml
golang github 项目地址:
https://github.com/wechatpay-apiv3/wechatpay-go
不过感觉还是三方的库,看起来更容易理解,而且支持 V2 版本 (我决定暂时用这个)
https://github.com/wleven/wxpay
还有一个三方库,虽然 star 人数多一些,但是年久失修,怕有坑
https://github.com/objcoding/wxpay
小程序端 API
https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html
参数:
- timeStamp
- nonceStr
- package (prepay_id=***)
- signType 默认 md5, 而 v3 不再使用 md5,改用 RSA (仅在 v3 版本接口适用)
- paySign 签名
V2 哪些接口需要证书
- 普通支付不需要证书
- 退款接口需要部署证书
v3 版本都需要证书么
似乎相对 V2,都需要证书。感觉是我的理解有误。
从2018年底开始,微信支付新入驻机构及商户都将使用CA签发证书,在证书申请页面上点击“下载证书”
只是说用 CA 证书,没有说都需要。
V3 版本相对 V2 的变化
https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay-1.shtml
相较于之前的微信支付API,主要区别是:
- 遵循统一的 REST ful 的设计风格
- 使用 JSON 作为数据交互的格式,不再使用 XML
- 使用基于非对称密钥的 SHA256-RSA 的数字签名算法,不再使用 MD5 或 HMAC-SHA256
- 不再要求 HTTPS 客户端证书
- 使用 AES-256-GCM,对回调中的关键信息进行加密保护
是否有必要使用 v3 的接口替代 v2
我感觉 v3 的接口非常复杂,相对而言 v2 简单多了。
是否有必要使用 v3 接口?
感觉暂时没有必要。
服务端的预支付接口
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
返回给小程序端的 golang 函数在这里:
https://github.com/wechatpay-apiv3/wechatpay-go/blob/7e058b2aae2ea884a152fccd0c10b14deef7bd47/services/payments/jsapi/api_jsapi_request_payment.go
预支付函数 Prepay:
https://github.com/wechatpay-apiv3/wechatpay-go/blob/main/services/payments/jsapi/api_jsapi.go
支付成功回调的数据结构
回调参数说明文档:
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7
解析函数
https://github.com/wleven/wxpay/blob/master/src/V2/pay.go
// NotifyFormat 通知数据解析
func NotifyFormat(data string) map[string]string {
return utils.XML2MAP([]byte(data))
}
商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄露导致出现“假通知”,造成资金损失。
可以参考这里,及 wxpay 的其他请求的返回处理方式,但是需要加上签名验证
https://github.com/liyoung1992/wechatpay
关于分账
无意间看到一个分账的功能:
https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=24_1
TODO
- [X] 由于预支付需要用到用户 open_id,所以需要先将登录分离
- [X] 先实现预支付
- [X] 预支付返回的参数,传给小程序端,前端进行支付
- [X] 将测试参数,修改为真实参数
- [X] 支付成功回调,需要调整为支持分的订单
- [ ] appid 的全局配置。login 一处,预支付一处,改起来麻烦
参考
- 小程序支付流程 https://segmentfault.com/a/1190000022606064
- 支付流程 V3 版本,官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml
- 支付流程 V2 旧版本,官方文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式