签名已经仔细的检查过了,不存在什么命名错误。与开发工具里面也对过了。
payMethod:function(){
wx.request({
url: `${basePath}/pay?`,
method:'POST',
data:{openId:`${app.globalData.openid}`},
success: function (re) {
let res = re.data
let paySign = md5.hexMD5('appId=' + wx.getAccountInfoSync().miniProgram.appId + '&nonceStr=' + res.nonceStr + '&package=' + res.package + '&signType=MD5&timeStamp=' + res.timeStamp + "&key=我的密钥").toUpperCase()
console.log(paySign,res.paySign) 前端签名与服务端返回的签名与官方提供的测试工具中的签名一致。
wx.requestPayment(
{
"timeStamp":res.timeStamp,
"nonceStr": res.nonceStr,
"package": res.package,
"signType": res.signType,
"paySign": paySign,
"success":function(res){
console.log(res)
},
"fail":function(res){},
"complete":function(res){}
})
}
})
},
q请问这能是什么原因?Map<String, String> rMap = wxpay.unifiedOrder(data);
贴一下后端代码 。
System.out.println("统一下单接口返回: " + rMap);
String return_code = (String) rMap.get("return_code");
String result_code = (String) rMap.get("result_code");
String nonceStr = WXPayUtil.generateNonceStr();
resultMap.put("nonceStr", nonceStr);
String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) {
String prepayid = rMap.get("prepay_id");
resultMap.put("package","prepay_id="+prepayid);
resultMap.put("signType","MD5");
//这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误
resultMap.put("timeStamp", timeStamp);
//再次签名,这个签名用于小程序端调用wx.requesetPayment方法
resultMap.put("appId","我的appID");
System.out.println(resultMap);
String sign = WXPayUtil.generateSignature(resultMap,"我的支付密钥");
resultMap.put("paySign",sign);
System.out.println("生成的签名paySign : "+ sign); 前后端生成的一致,用的官方提供的方法