徐向博 / Imin.

php + 小程序微信支付流程
作者:Imin 时间:2020-12-23 分类: 微信开发

阿西吧,第一次自己独立接小程序的支付功能,从小程序前端到后台下单接口,那叫一个狼狈,,,文档都翻烂了,还是对整个流程保持一个模糊的认知。腾讯系的开发文档,不讲武德啊!赶紧记录一下,省的下次还抓瞎!再次阿西吧!

一、整体流程

小程序端发起创建订单的请求 -> 服务端创建订单(自家的订单系统) -> 服务端向微信请求:统一下单接口,生成微信订单 -> 微信验证通过以后,返回一个可用的支付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,微信文档中说是可选参数,但事实是不带这个参数,签名验证就不通过!


本文标签: 微信支付