JSAPI支付调起微信支付时提示“缺少参数appId”怎么办?
我在做微信JSAPI支付,后端已经返回了prepay_id,前端调用wx.chooseWXPay时却一直报“缺少参数appId”。明明config里已经传了appId,是不是哪里顺序错了?
我试过把appId单独加到chooseWXPay的参数里,但还是不行。这是我的调用代码:
wx.chooseWXPay({
timestamp: res.timestamp,
nonceStr: res.nonceStr,
package: 'prepay_id=' + res.prepay_id,
signType: 'RSA',
paySign: res.paySign,
success: function (res) {
console.log('支付成功', res);
}
});
appId。微信 JSAPI 支付的
paySign是用appId、timestamp、nonceStr、package、signType这几个参数一起算出来的,服务端在生成签名的时候,如果没把appId加进去,那前端就算 config 里配了appId,调用chooseWXPay时微信底层校验签名就会失败,然后就给你报“缺少参数appId”。你检查下服务端生成
paySign的逻辑,确保参与签名的参数里确实包含了appId,而且这个appId要和你公众号(或者小程序)的appId完全一致(别用错成支付商户号那种 AppID)。比如 Node.js 用
wechatpay-node-v3的话,生成预支付订单后,签名 JSAPI 支付参数时的代码大致是这样:别搞混了
appId和mchid,一个是公众号的,一个是商户号的。我之前就栽过这个坑,以为用商户号那个能通吃,结果调 JSAPI 一直报这个错,debug 半天才想起来看文档里签名参数要求的是appId。