唤起支付页面
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
坑一:prepay_id造成签名验证不正确
package的值格式为"prepay_id=xxx", “prepay_id=”是必传的。
坑二:paySign需要第二次验证
开始以为paySign就是统一下单接口的签名,直接传给小程序端,结果怎么都不对。
1. 下单请求无误,说明统一下单接口签名无误;
2. 小程序唤起支付报签名失败,说明还是有问题;
3. 仔细看微信开发文档,发现paySign并不是统一下单接口的签名;文档如下:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6
paySign实际上为timestamp、nonceStr、package、signType这几个小程序端请求参数MD5之后的结果
timestamp
有人说这也是一个坑点,其实这个地方说的很清楚,jssdk中所有的timestamp都是小写,不过获取paySign时,拼接参数的timeStamp需要大写