昨天开发微信公众号支付功能的时候,前端调用jssdk的wxChoosePay一直提示
{"errMsg":"chooseWXPay:fail"}
经过不懈努力,发现了几个坑,全部解决后,成功完成了公众号支付功能,下面我就来说说我碰到的这些坑,希望对小伙伴们有所帮助。
1.微信支付授权目录一定要配置到最后一层
授权目录的配置地址是:微信商户平台 > 产品中心 > 开发配置 ,
比如:调用chooseWXPay的JSSDK的页面地址为 http://www.bigfoot.xin/weixin/pay/test.html那么授权目录需要配置为 http://www.bigfoot.xin/weixin/pay/,如果只是配置成http://www.bigfoot.xin/weixin/将报错
2.后台生成chooseWXPay的签名时,timestamp的s要大写,即timeStamp;appid的i也要大写,即appId。
我们知道,微信jssdk在前端发起一个微信支付是这样调用的:
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
其中,参与生成签名的有appId, timeStamp, nonceStr, package, signType,
注意到区别了吗,虽然在调用chooseWXPay的时候timestamp的s是小写的,但是后台生成签名的时候,用的名称是timeStamp,这点看了微信官方文档的人应该都会注意到。
但是!!!还有一点!!!很多人包括我没注意到,appid的i,生成签名也是要大写的!!!就是这点折腾了我好久,微信开发中很多接口的签名生成都要用到appid字段,其中的i基本都是小写(包括公众号支付统一下单接口的签名生成)。而唯独这里生成chooseWXPay的签名时,appid的i要大写。