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后台日志
"timeStamp": "1414561699",
APPID 商户号这些都是写死的,用的是普通商户模式,验签工具是通过验证了,但用开发小程序的工具调起,扫码提示验签不通过