收藏
回答

paySign签名遇到的问题,packaged 在做 签名时 = 号后面值不会被计算到签名中区

//- > 前端代码

 "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



最后一次编辑于  2019-12-25
回答关注问题邀请回答
收藏

3 个回答

  • 诚
    2021-10-15

    你好,解决了吗

    2021-10-15
    有用 1
    回复
  • 微信支付技术助手1
    微信支付技术助手1
    2019-12-25

    这边建议你https://pay.weixin.qq.com/wiki/doc/api/index.html下载一个对应的demo进行对比。

    2019-12-25
    有用
    回复 2
    • 梦尋 # Junjie 🍂
      梦尋 # Junjie 🍂
      2019-12-25
      签名条件: {
          "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 没有提供值 ,你叫我咋办
      2019-12-25
      回复
    • 梦尋 # Junjie 🍂
      梦尋 # Junjie 🍂
      2019-12-25
      这是代码图 我并且确定 package 的赋值 是否正确
      2019-12-25
      回复
  • 王浩Hanks🇨🇳
    王浩Hanks🇨🇳
    2019-12-25

    谢邀,你下载一个官方的javaSDK 的demo看看

    2019-12-25
    有用
    回复 1
    • 梦尋 # Junjie 🍂
      梦尋 # Junjie 🍂
      2019-12-25
      就说按照官方的javaSDK 来的
      2019-12-25
      回复
登录 后发表内容
问题标签