关于微信小程序支付APIv2“签名验证失败”问题解决方案

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)
					}
				})
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值