1.微信对于小程序支付的文档
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_10&index=1
2.依次检查
小程序appid
商户号(mchid)
APIv2密钥/APIv3密钥
是否是正确的
3.查看后台返回的参数
查看resturn_code和return_code 是不是SUCCESS
参数只用到appid、timeStamp、nonce_str、prepay_id
(prepay_id是后台生成微信预付款订单id必要 ,timeStamp和nonce_str可以用自己生成的)
4.将后台返回的参数在《微信支付接口签名校验工具》进行查看是否是正确的
5.正确之后进行下一步前端生成paySign值
获取paySign的MD5参数(注意参数名排序:微信的签名算法是根据参数名ASCII码从小到大排序)
vue安装MD5加密方式
const sign = 'appId=' + this.paydata.appid + '&nonceStr=' + this.paydata.nonce_str + '&package=prepay_id=' + this.paydata.prepay_id + '&signType=MD5&timeStamp=' +this.paydata.timeStamp
var stringSignTemp = sign + "&key=自己的APIv2密钥"
console.log(stringSignTemp)
var paySign= MD5(stringSignTemp).toUpperCase()
console.log(paySign)
打印paySign xml格式的参数
var xmldata = `<xml>
<appId><![CDATA[wx8deeb278e355b00d]]></appId>
<nonceStr><![CDATA[` + this.paydata.nonce_str + `]]></nonceStr>
<package><![CDATA[prepay_id=` + this.paydata.prepay_id + `]]></package>
<signType><![CDATA[MD5]]></signType>
<timeStamp><![CDATA[` + this.paydata.timeStamp + `]]></timeStamp>
<sign>` + paySign+ `</sign>
</xml>`
console.log(xmldata)
然后将获取到的xml格式参数放在进行验证,注意查看3.生成sign并转成大写和4校验结果必须一致,不一致的话查看paySign的MD5参数的参数是否正确
《微信支付接口签名校验工具》
6.提交微信支付
wx.requestPayment({
appId: paydata.appid,
timeStamp: paydata.timeStamp + '', //后端返回的时间戳(自己也可生成时间戳)
nonceStr: paydata.nonce_str, //后端返回的随机字符串
package: "prepay_id=" + paydata.prepay_id, //后端返回的prepay_id
signType: 'MD5', //后端签名算法,根据后端来,后端MD5这里即为MD5
paySign: paySign,//上述生成的paySign值
success(res) {
console.log('用户支付扣款成功', res)
},
fail(err) {
_this.payerror()
console.log('用户支付扣款失败', err)
},
complete(com) {
console.log('用户支付扣款操作返回', com)
}
})