Closed pyrange closed 1 year ago
body要使用原始的报文,而不是 toJSONString()
的字符串。经过序列化和反序列化之后,跟原文不一致。
public ResponseEntity<WxResultInfoVo> wxNotify(
@RequestHeader("wechatpay-serial") String serialNumber,
@RequestHeader("wechatpay-nonce") String nonce,
@RequestHeader("wechatpay-signature") String signature,
@RequestHeader("wechatpay-timestamp") String timestamp,
@RequestHeader("wechatpay-signature-type") String signType,
HttpServletRequest request
) {
String body = IOUtils.toString(request.getInputStream());
RequestParam requestParam = new RequestParam.Builder()
.serialNumber(serialNumber.trim())
.nonce(nonce.trim())
.signature(signature.trim())
.timestamp(timestamp.trim())
// 若未设置signType,默认值为 WECHATPAY2-SHA256-RSA2048
.signType(signType.trim())
.body(body)
.build();
NotificationParser parser = new NotificationParser(config);
Map map = parser.parse(requestParam, Map.class);
这样子也是验签不通过
能给一个获取原始body的例子么?
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();
}
有的极少订单回调会报这个解签错误,大部分订单可以成功,这个是body读取的代码示例,不清楚为什么会这样,微信sdk版本是0.2.7
感谢大佬们先踩坑了,让咱吃了现成的了
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(); }
有的极少订单回调会报这个解签错误,大部分订单可以成功,这个是body读取的代码示例,不清楚为什么会这样,微信sdk版本是0.2.7
我猜你要找的是‘签名探测流量’,https://pay.weixin.qq.com/docs/merchant/development/interface-rules/signature-verification.html
错误描述
微信支付成功,异步通知解密数据异常
运行环境
java:JDK17 依赖微信sdk:wechatpay-java;0.2.4版本
示例代码
异常信息:
重现bug的步骤
预期行为
正常解析密文
导致错误的代码片段
操作系统
win10
Java 版本
java 17
wechatpay-java 版本
0.2.4
其他信息
无