豫ICP备2024044691号-1
powered by emlog
微信小程序拉起支付
Mins 2020-3-17 20:58 微信开发

流程

1.小程序端发起创建订单的请求(自家的订单系统)
2.服务端创建订单(自家的订单系统)
3.服务端向微信请求:统一下单接口,生成微信订单
4.微信验证通过以后,返回一个可用的支付id
5.服务端处理数据后,返回给小程序端
6.小程序端拿这个支付id拉起微信支付
7.用户支付完成
8.微信向你在统一下单时预留的url发送请求,告知支付状态
9.小程序的处理支付成功

小程序端发起微信支付

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,微信文档中说是可选参数,但事实是不带这个参数,签名验证就不通过!