//- > 前端代码
"appId":data.appId, //公众号名称,由商户传入
"timeStamp":data.timeStamp, //时间戳,自1970年以来的秒数
"nonceStr":data.nonceStr, //随机串
"package":data.packageValue, //-> 这里我是 使用 "prepay_id="+prepayId; 得到的,package是关键字,所以需要处理
"signType":data.signType, //微信签名方式:
"paySign":data.paySign //微信签名
//-> java 代码
StringBuilder signValue = new StringBuilder(200);
//-> 公众号名称
signValue.append("appId").append('=').append(this.appId).append('&');
//-> 随机数
signValue.append("nonceStr").append('=').append(Utils.random(32)).append('&');
//-> this.packageValue = "prepay_id="+prepayId ; 所谓的 package
signValue.append("package").append('=').append(this.packageValue).append('&');
//-> MD5
signValue.append("signType").append('=').append("MD5").append('&');
//-> 当前秒
signValue.append("timeStamp").append('=').append(WXPayUtil.getCurrentTimestamp()).append('&');
//-> 秘钥值
signValue.append("key=").append(Token.KEY);
System.err.println(signValue);
this.sign = WXPayUtil.MD5(signValue.toString());
//->这是计算签名的代码,
//-> 计算过后得到的值 然后去微信 那边比对 是不一致的 就是微信提供的测试工具
微信在计算的时候 把我的 "=" 后面的值 移除掉了 导致计算出的签名不一致 , 如果等号 "=" 使用 %3D 转义,签名倒是能 通过 , 而支付那边 又说我没有 支付金额 字段值 total_fee, 而这个值 是有的, 也去查看一下百度 他们都说是 package 这个值 找不到订单
//-> data里面的值是能保证 一致的 我怀疑的是 微信js做签名的时候 吧 = 后的值 移除了 所以计算的签名不一致, 使用 %3D 然而又找不到 total_fee
你好,解决了吗
这边建议你https://pay.weixin.qq.com/wiki/doc/api/index.html下载一个对应的demo进行对比。
"timeStamp": "1577265**",
"signType": "MD5",
"package": "prepay_id=wx251713296074796c46771d931503055400",
"nonceStr": "H4h6hXij9a8L8yfou92zeJReNuaIEEx9",
"appId": "wx*****a"
}
签名字符串:appId=wx5c*****a&nonceStr=H4h6hXij9a8L8yfou92zeJReNuaIEEx9&package=prepay_id=wx251713296074796c46771d931503055400&signType=MD5&timeStamp=1577265295&key=d18044bd68e****3e7dd0b18ab6eb
签名类型:MD5
计算所得的签名:A3530F28F9033008710C1C362AA8A151
这是代码计算的 调用的都是案例里面的函数
然后 去你们提供的 签名验证
appId=wx****a2a&nonceStr=H4h6hXij9a8L8yfou92zeJReNuaIEEx9&package=prepay_id&signType=MD5&timeStamp=15772***&key=d18044*****d0b18ab6eb
28858285A6167A20569F275F9E44421C
计算出来的值 却不合你们案例里面的一致
主要原因是 : package 这个, 我后台是
package=prepay_id=wx251713296074796c46771d931503055400
但是你们提供的验证
package=prepay_id
确实这样的 =wx251713296074796c46771d931503055400 没有做签名计算
者就导致我签名没有通过
我后台尝试过吧 package=prepay_id=wx251713296074796c46771d931503055400 更改为 package=prepay_id,签名是过了 但是 说 我的 "total_fee"没有, 这种问题怎么解决 我也去百度了 就说 package=prepay_id 的 prepay_id 没有提供值 ,你叫我咋办
谢邀,你下载一个官方的javaSDK 的demo看看