收藏
回答

微信小程序支付V3验签工具成功,小程序调用提示验签失败,是什么原因,弄了很久了?

JSONObject jsonObject=new JSONObject();
 // 初始化商户配置
 Config config =
         new RSAPublicKeyConfig.Builder()
                 .merchantId(merchantId)

                 .privateKeyFromPath(privateKeyPath)
                 .publicKeyFromPath(publicKeyPath)
                 .publicKeyId(publicKeyId)
                 .merchantSerialNumber(merchantSerialNumber)
                 .apiV3Key(apiV3Key)
                 .build();




 // 初始化服务
 service = new JsapiService.Builder().config(config).build();
 // ... 调用接口
 String prepayId = prepay(json);
 logger.info(prepayId);
 jsonObject.put("prepayId",prepayId);
 Date date = new Date();
 long timestamp = date.getTime()/1000;
 String uuid = CommUtils.getUUID().toUpperCase();
 jsonObject.put("timeStamp",timestamp);
 jsonObject.put("nonceStr",uuid);
 jsonObject.put("signType","RSA");
 jsonObject.put("package","prepay_id="+prepayId);

String signMessage =   "wxdf3c4728a16ecf73\n"
         + timestamp + "\n"
         + uuid + "\n"
         + "prepay_id="+prepayId + "\n";
 logger.info(signMessage);

 // 3. 加载商户私钥(实际项目应从安全存储读取)
 PrivateKey privateKey = PemUtil.loadPrivateKeyFromPath(privateKeyPath);

 // 4. 生成 SHA256-RSA 签名
 Signature signature = Signature.getInstance("SHA256withRSA");
 signature.initSign(privateKey);
 signature.update(signMessage.getBytes(StandardCharsets.UTF_8));
 byte[] signBytes = signature.sign();
String paySign = Base64.getEncoder().encodeToString(signBytes);
 logger.info(paySign);

 jsonObject.put("paySign",paySign);


 try {
    // closeOrder();
 } catch (Exception e) { // 发送HTTP请求失败
     // 调用e.getHttpRequest()获取请求打印日志或上报监控,更多方法见HttpException定义
 }
 return jsonObject;


JAVA后台日志

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

2 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    星期四 15:00
     "timeStamp": "1414561699",
    


    星期四 15:00
    有用
    回复
  • 你⃝的⃝名⃝字
    你⃝的⃝名⃝字
    星期四 13:46

    APPID 商户号这些都是写死的,用的是普通商户模式,验签工具是通过验证了,但用开发小程序的工具调起,扫码提示验签不通过

    星期四 13:46
    有用
    回复
登录 后发表内容