JSAPI支付踩坑“支付验证签名失败”
发布于 5 年前 作者 vjia 1815 次浏览 来自 分享

大佬请绕道!

最开始图方便,使用了PHP的http_build_query来将数组转为字符串,此处会将prepay_id=123456789的等号进行转换成%3D导致签名验证失败。

此处建议使用官方的例子,使用字符串将参数拼接,避免出错。

特别注意timestamps后端在签名的时候是大写S,而微信的js-sdk里面wx.chooseWXPay接口调用时是小写。

微信js-sdk文档里面还有一个坑。

wx.chooseWXPay({
  timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
  nonceStr: '', // 支付签名随机串,不长于 32 位
  package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
  signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
  paySign: '', // 支付签名
  success: function (res) {
    // 支付成功后的回调函数
  }
});

调用这个接口居然没有用appId这个参数,不管你怎么调,最后都报支付验证签名失败。

最终在微信支付官方的文档里面看到调用接口有appId,果断加上试了一下。成功了。

1 回复

我按照你说的加了后不行啊

回到顶部