支付成功回调后,出现极个别支付单解签失败的情况
Closed this issue · 3 comments
liguangling-lgl commented
错误描述
重现bug的步骤
@Override
public PayCallbackResult callbackWechatPay(HttpServletRequest httpServletRequest) {
String body = getRequestBody(httpServletRequest);
String serialNumber = httpServletRequest.getHeader("Wechatpay-Serial");
String nonce = httpServletRequest.getHeader("Wechatpay-Nonce");
String signature = httpServletRequest.getHeader("Wechatpay-Signature");
String timestamp = httpServletRequest.getHeader("Wechatpay-Timestamp");
RequestParam requestParam = new RequestParam.Builder()
.serialNumber(serialNumber)
.nonce(nonce)
.signature(signature)
.timestamp(timestamp)
.body(body)
.build();
log.info("支付回调,通知参数:{}", JSON.toJSONString(requestParam));
NotificationConfig config = (NotificationConfig) wechatPayConfigHolder.getConfig();
NotificationParser parser = new NotificationParser(config);
Transaction transaction = parser.parse(requestParam, Transaction.class);
String paySn = "P" + IdGeneratorManager.globalGenerator();
OrderCallbackReqDTO orderCallbackReqDTO = OrderCallbackReqDTO.builder()
.status(TradeStatusEnum.queryActualTradeStatusCode(transaction.getTradeState().name()))
.joinTime(DateUtil.date())
.tradeNo(transaction.getTransactionId())
.gmtPayment(DateUtil.parse(transaction.getSuccessTime()))
.orderSn(transaction.getOutTradeNo())
.paySn(paySn)
.build();
return orderService.callbackOrder(orderCallbackReqDTO);
}
private String getRequestBody(HttpServletRequest request) {
ByteArrayOutputStream body = new ByteArrayOutputStream();
try {
ServletInputStream inputStream = request.getInputStream();
byte[] buffer = new byte[1024];
for (int length; (length = inputStream.read(buffer)) != -1; ) {
body.write(buffer, 0, length);
}
} catch (IOException ex) {
log.error("支付回调,读取数据流异常", ex);
}
log.info("支付回调,通知消息体:{}", body);
return body.toString();
}
}
解签代码 ,使用的微信SDK
预期行为
有的订单支付成功回调没有问题,极少订单会出现解签失败的情况,不清楚为什么
导致错误的代码片段
Transaction transaction = parser.parse(requestParam, Transaction.class);
操作系统
linux
Java 版本
Java21
wechatpay-java 版本
0.2.7
其他信息
No response
ByteChen commented
liguangling-lgl commented
是的 ,感谢 确实是这个原因
heixiaoma commented
原来如此,吓得我还以为是用户付款了,没有给用户东西