收藏
回答

麻烦帮我看一下前端一直报支付验证签名失败

{"timeStamp":"1565845310","package":"prepay_id=wx15130150227944f319b77f651810542900","appId":"wx065ba35b40965b09","sign":"EE55605F3207ADE98802787B71140AAB","signType":"MD5","nonceStr":"wBlPKR040XlOXfoL6BYpu8JD6Gs9353P"}

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

4 个回答

  • 大头
    大头
    09-09

    检查所有待签名数据的参数名和参数值都是正确的。

    09-09
    有用
    回复
  • 超
    2020-01-08

    请问你解决了嘛

    2020-01-08
    有用
    回复
  • 微信支付技术助手1
    微信支付技术助手1
    2019-08-15

    签名错误,用官方签名工具验证参数,查看KEY和编码是否正确。

    2019-08-15
    有用
    回复 1
    • 帕西法尔
      帕西法尔
      2019-08-15
      用工具测试正确啊
      2019-08-15
      回复
  • 痛快科技
    痛快科技
    2019-08-15

    放一下签名相关代码,可以按照文档一行一行的检查

    2019-08-15
    有用
    回复 2
    • 帕西法尔
      帕西法尔
      2019-08-15
      /**
           * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
           *
           * @param data     待签名数据
           * @param key      API密钥
           * @param signType 签名方式
           * @return 签名
           */
          public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {
              Set<String> keySet = data.keySet();
              String[] keyArray = keySet.toArray(new String[keySet.size()]);
              Arrays.sort(keyArray);
              StringBuilder sb = new StringBuilder();
              for (String k : keyArray) {
                  if (k.equals(WXPayConstants.FIELD_SIGN)) {
                      continue;
                  }
                  if (data.get(k).trim().length() > 0) {
                      sb.append(k).append("=").append(data.get(k).trim()).append("&");
                  }
              }
              sb.append("key=").append(key);
              if (SignType.MD5.equals(signType)) {
                  return MD5(sb.toString()).toUpperCase();
              } else if (SignType.HMACSHA256.equals(signType)) {
                  return HMACSHA256(sb.toString(), key);
              } else {
                  throw new Exception(String.format("Invalid sign_type: %s", signType));
              }
          }


      2019-08-15
      回复
    • 帕西法尔
      帕西法尔
      2019-08-15回复帕西法尔
      if (StringUtils.equals(return_code, "SUCCESS") && StringUtils.equals(result_code, "SUCCESS")) {
       
                      if (payPaymentType == PAY_PAYMENT_TYPE.微信公众号) {
                          Map<String, String> resultMap = new HashMap<>();
       
                          resultMap.put("appId", config.getAppId());
                          resultMap.put("nonceStr", WXPayUtil.generateNonceStr());
                          resultMap.put("package", "prepay_id=" + resp.get("prepay_id"));
                          resultMap.put("signType", WXPayConstants.MD5);
                          resultMap.put("timeStamp", WXPayUtil.getCurrentTimestamp()+"");
       
                          String sign = WXPayUtil.generateSignature(resultMap, config.getKey(), WXPayConstants.SignType.MD5);
                          resultMap.put("sign", sign);
       
                          return ServiceResult.SUCCESS(resultMap, "创建微信订单成功");
                      }
       
                      return ServiceResult.SUCCESS(resp, "创建微信订单成功");
                  } else {
                      /**
                       * 插入错误日志
                       */
                      payLogService.addPayLog(new PayLogDTO("微信订单校验", GsonUtil.getInstanceNoNull().toJson(data), GsonUtil.getInstanceNoNull().toJson(ServiceResult.ERROR(err_code_des))), new UserInfoDTO("1", "微信订单校验1"));
       
                      return ServiceResult.ERROR(err_code_des);
                  }


      2019-08-15
      回复
登录 后发表内容