最近用nodejs开发微信公众号支付功能后台,明明后台已经签名校验成功了(签名相关可参照我的上一篇文章),支付的prepay_id都已经拿到了,但是返回给H5,H5调起微信支付面板时一直报chooseWXPay:fail,关键是android机闪了下支付面板,然后就没了,连个错误弹框都没,而ios就弹支付签名验证失败,搞了我大半天,才搞定。
通过微信https://api.mch.weixin.qq.com/pay/unifiedorder接口成功返回prepay_id, nonce_str, sign 等参数,然后将这些参数返回给H5,h5调微信支付接口,然后就一直报支付签名验证失败了。
1.我的问题是,微信接口返回的 签名(sign) 不能直接给h5,需要再次签名!!!!(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
再次签名:paySign=MD5(appId=${appid}&nonceStr=${nonceStr}&package=prepay_id=${prepay_id}&signType=MD5&timeStamp=${timeStamp}&key=${key}).toString().toUpperCase(); 得到签名paySign连同timeStamp,appid,nonceStr一并返回给H5,
需要注意的是:再次签名中的时间戳是秒,timeStamp中的S是大写,而H5请求支付时timestamp中的s是小写
2.当然,有些人时因为支付授权目录配置错误,需要检查h5支付授权目录是否正确,网上很多说是要配置到二级或三级目录,但发现它们的开发配置文档是之前的,8月1号后支付都移到微信支付平台了,而且官方也没提示要配置到二级或三级了,估计这个也坑了很多人,我这边情况就配置了审核过的域名,这个应该要根据项目而定。这块我没遇到问题就不写,怕写得不对就埋坑了。