收藏
回答

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。

哪里需要修改呢?

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

1 个回答

  • 慎独之心
    慎独之心
    1天前

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

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


    1天前
    有用
    回复 1
    • 慎独之心
      慎独之心
      1天前
      到底需要修改什么 有没有java版本的签名校验模板方法
      1天前
      回复
登录 后发表内容