问题已解决。
根据微信开发文档,返回签名是根据如下字段生成的:
参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package
而根据开发文档的调起支付一节,请求参数就是上述6个再加上签名,只是参数名全是小写的。
也就是说,要使用小写的生成签名,而返回驼峰式的到前端 APP,奇葩吧!
的确是这个问题。我把代码帖一下,免得后面人也被坑。
var reqparam = {
appid: AppCfg.WXPayCfg.appid,
partnerid:data.mch_id,
prepayid:data.prepay_id,
timestamp: generateTimeStamp(),
noncestr: generateNonceStr(),
package:'Sign=WXPay',
};
reqparam.sign = wxpay.sign(reqparam);
let result = await WeChat.pay({
partnerId: res.partnerid, /*商家向财付通申请的商家id*/
prepayId: res.prepayid, /*预支付订单*/
nonceStr: res.noncestr, /*随机串,防重发*/
timeStamp: res.timestamp, /*时间戳,防重发*/
package: res.package, /*商家根据财付通文档填写的数据和签名*/
sign: res.sign, /*商家根据微信开放平台文档对数据做的签名*/
});
还有就是 timestamp得是10位int, 这个问题困扰了我半天
Most helpful comment
的确是这个问题。我把代码帖一下,免得后面人也被坑。
server side
app side