php + 小程序微信支付流程
阿西吧,第一次自己独立接小程序的支付功能,从小程序前端到后台下单接口,那叫一个狼狈,,,文档都翻烂了,还是对整个流程保持一个模糊的认知。腾讯系的开发文档,不讲武德啊!赶紧记录一下,省的下次还抓瞎!再次阿西吧!
一、整体流程
小程序端发起创建订单的请求 -> 服务端创建订单(自家的订单系统) -> 服务端向微信请求:统一下单接口,生成微信订单 -> 微信验证通过以后,返回一个可用的支付id -> 服务端处理数据后,返回给小程序端 -> 小程序端拿这个支付id拉起微信支付 -> 用户支付完成 -> 微信向你在统一下单时预留的url发送请求,告知支付状态-> 流程结束,撒花!
二、小程序端发起支付请求
wx.request({
url: `${host}/order/pay/`,
success (r){
if(r.data.result_code == 'SUCCESS'){
wx.requestPayment({
timeStamp: String(r.data.time),
nonceStr: r.data.nonce_str,
package: 'prepay_id=' + r.data.prepay_id,
paySign: r.data.appSign,
signType: 'MD5',
complete (r){
console.log('complete')
console.log(r)
}
})
}
}
})
小程序端代码如上,wx.requestPayment中有几个注意事项,会导致支付时报签名失败:
1、timeStamp应该是字符串类型
2、nonceStr应该是统一下单接口中,微信返回的nonceStr,而不是自家后端在签名之前写死的那个
3、paySign,这个签名和后端发送统一下单接口时的签名,不是一回事!需要重新按照小程序的规则计算签名,这很重要!
4、signType默认是MD5,微信文档中说是可选参数,但事实是不带这个参数,签名验证就不通过!
本文标签: 微信支付