收藏
回答

wx.requestCommonPayment 用户态签名校验失败?

public static String calcSignature(String postBody, String sessionKey) {
    // 输入验证
    if (postBody == null || postBody.isEmpty() || sessionKey == null || sessionKey.isEmpty()) {
       return null;
    }

    try {
       // 准备签名消息
       byte[] needSignMsg = postBody.getBytes("UTF-8");

       // 创建HMAC-SHA256实例
       Mac sha256Hmac = Mac.getInstance("HmacSHA256");
       SecretKeySpec secretKey = new SecretKeySpec(sessionKey.getBytes("UTF-8"), "HmacSHA256");
       sha256Hmac.init(secretKey);

       // 生成签名
       byte[] hash = sha256Hmac.doFinal(needSignMsg);

       // 将字节数组转换为十六进制字符串
       StringBuilder hexString = new StringBuilder();
       for (byte b : hash) {
          String hex = Integer.toHexString(0xFF & b);
          if (hex.length() == 1) {
             hexString.append('0');
          }
          hexString.append(hex);
       }

       // 返回签名
       return hexString.toString();
    } catch (NoSuchAlgorithmException | InvalidKeyException | java.io.UnsupportedEncodingException e) {
       System.err.println("生成签名时发生错误: " + e.getMessage());
       return null;
    }
}

String signature = calcSignature(JSON.toJSONString(signData), sessionKey);

为什么还是签名校验失败,返回requestCommonPayment:fail webapi_wxa_createmidasorder:fail invalid signature" 702002。

哪里需要修改呢?

回答关注问题邀请回答
收藏

3 个回答

  • Liz
    Liz
    10-30

    我也遇到了同样的报错,咋搞?

    10-30
    有用
    回复
  • 重庆安逸软件
    重庆安逸软件
    10-23

    最好不要接这个支付,b2b支付完全不明确,搞得乱乱的

    10-23
    有用
    回复
  • 慎独之心
    慎独之心
    10-21

    calcSignature(JSON.toJSONString(signData), sessionKey);

    这里的signData就是传给小程序接口的signData字段


    10-21
    有用
    回复 3
    • 慎独之心
      慎独之心
      10-21
      到底需要修改什么 有没有java版本的签名校验模板方法
      10-21
      回复
    • 慎独之心
      慎独之心
      10-24回复慎独之心
      解决了 调用需要最新的sessionKey
      10-24
      回复
    • 木木
      木木
      星期一 10:52回复慎独之心
      方便说下,具体参数?我也是遇到同样错误
      星期一 10:52
      回复
登录 后发表内容