transaction没有getDescription函数,如何获得Description
String privateKeyContent = new String(Files.readAllBytes(Paths.get(rootPath + wxpayCertPath)), StandardCharsets.UTF_8);
// 动态获取序列号
String serialNo = getCertificateSerialNo();
RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder()
.merchantId(WxpayConfig.mchId)
.privateKey(privateKeyContent)
.merchantSerialNumber(serialNo)
.apiV3Key(WxpayConfig.apiKey)
.build();
// 修复1:使用新的NotificationParser方式(推荐)
// =============== 推荐方式:使用NotificationParser ===============
NotificationParser parser = new NotificationParser(config);
// 构建请求参数
com.wechat.pay.java.core.notification.RequestParam requestParam = new com.wechat.pay.java.core.notification.RequestParam.Builder()
.serialNumber(request.getHeader("Wechatpay-Serial"))
.nonce(request.getHeader("Wechatpay-Nonce"))
.signature(request.getHeader("Wechatpay-Signature"))
.timestamp(request.getHeader("Wechatpay-Timestamp"))
.body(requestBody)
.build();
// 解析为Transaction对象
Transaction transaction = parser.parse(requestParam, Transaction.class);
System.out.println("微信回调验签成功!");
System.out.println("requestBody=");
System.out.println(requestBody);
System.out.println("requestParam=");
System.out.println(requestParam);
// 转换微信支付回调数据为Wxpay对象
Wxpay wxpay = new Wxpay();
wxpay.setOut_trade_no(transaction.getOutTradeNo());
wxpay.setTransaction_id(transaction.getTransactionId());
// 金额处理:分转元
float totalAmount = (float) transaction.getAmount().getTotal() / 100;
wxpay.setTotal_fee(totalAmount);
String description = transaction.getDescription(); // 关键修正!
String[] parts = description.split(";", 2); // 按分号分割