IllegalArgumentException: Last unit does not have enough valid bits
错误描述
有关微信探测流量问题。服务端已发送4xx/5xx http返回code。 微信请求参数: header signature 参数:WECHATPAY/SIGNTEST/2sWfO+6tVVsZonOXBXHOrle0TugJ31jDV3iGpjFchMYEyEZ48LxAmfW2gMXkP7Ce1OLORt7wHxkgBwTBHn9/JpPBwDFjiHMhSQCEYkk/gIXdO1E7dz6fnMmMqmI2urSR8WDWAG0jdIGFbnykjVFrQa7E1RhNNEIz476tmfj5Zp7W/kE1q7cxZIPumELjwfZHXybvrFMuYNEcf8Eq50V+I1e5onuIAa3RIuIIy30Kl2RANQJx1inQ0SirJjFtONAcPnLDWpeJuVCfRPLXE4ra5qsSwxbUDvnCAbTkz4L1mSZ/zyv80hd9t8upwSLbLiYJWV97N04Pb74zCg==
header timestamp 参数:1733109540
header nonce 参数:xQWHK22dufHjLYg07545neOg4llwMJCJ
header serial 参数:51856640BA57CBD6343BA9EA2D409A9E9AC5EB65
body 参数:{"id":"7442f44b-aa13-5a7c-b6a9-51c5c8ace319","create_time":"2024-12-02T11:18:54+08:00","resource_type":"encrypt-resource","event_type":"MCHTRANSFER.BATCH.FINISHED","summary":"商家转账批次完成通知","resource":{"original_type":"mch_payment","algorithm":"AEAD_AES_256_GCM","ciphertext":"xZxoYIF+iotAhrQ7O0iTVLEuVqqRQscDHXww3bZjO1YmFBAtNADtC+R/4z0ZHsub086VImQpjoeDAlWoS1xVuHquTGaG7ozNjzFOT742/cBcARUw4zFVqX4CZWpMoqfCYuztO6BvtowDHNbXcz7IdrOwAHW1f7nZJb3hOHaiXrfX+s8YSZ8uLFRLljqWH7ZqeciJBt0qyApwnDCzLYrga6QG1pBxxOFVlQIgAXknS3uoRHoj9ddb2uVTwFgTFT12e1q6gg1mMtRD/wsbyQsg1HWsj5Pw4pxrXMtp+8Ho4VFuJ0susbpBrklpn6UMP8ezfcZGv/OnBfz2XMYE4kjsdC1u9fn3VSQTVl7UQNUEAcaWHOGNxduhmV5L/cXuX/hOmzwEzzrCG4OAxeMKBwEqNWRxkLtVfYRMmRJMNmWBPoJUTQ==","associated_data":"mch_payment","nonce":"PCnxcpKD3eQZ"}}
返回参数为:
400
重现bug的步骤
- 微信探测流量 header。
- 解密出现错误,进行捕捉。
- 捕捉完成后,返回http code 为 400
- 返回成功后,微信商户未再次给服务端发送正确的签名。
预期行为
- 探测流量发送后,服务端已返回400 请求码。
- 微信支付,再次发送正确参数。给到服务端。
导致错误的代码片段
try {
WechatRedPacket transaction = notificationParser.parse(requestParam, WechatRedPacket.class);
log.info("解析后的数据为:{}", JSON.toJSONString(transaction));
} catch (ValidationException e) {
// 签名验证失败,返回 401 UNAUTHORIZED 状态码
log.error("sign verification failed", e);
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
} catch (IllegalArgumentException e) {
log.error("sign verification failed", e);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
操作系统
linux
Java 版本
Java 8
wechatpay-java 版本
v0.2.15
其他信息
No response
https://support.pay.weixin.qq.com/online-service 可以用订单号等信息,通过在线技术支持渠道反馈问题排查
https://support.pay.weixin.qq.com/online-service 可以用订单号等信息,通过在线技术支持渠道反馈问题排查
AI开发助手? 这个没有用
探测流量不会因为你给400/500 就会重复下发
探测流量不会因为你给400/500 就会重复下发
那怎么办 给用户发送的金额. 后面也没有通知发给我
探测流量不会因为你给400/500 就会重复下发
那怎么办 给用户发送的金额. 后面也没有通知发给我
正常的通知下发和探测流量不冲突,不是一回事
探测流量不会因为你给400/500 就会重复下发
那怎么办 给用户发送的金额. 后面也没有通知发给我
正常的通知下发和探测流量不冲突,不是一回事
那这个就有BUG了 后续我也没看见签名进来. 我现在差不多50%的订单都卡在中间状态
探测流量不会因为你给400/500 就会重复下发
那怎么办 给用户发送的金额. 后面也没有通知发给我
正常的通知下发和探测流量不冲突,不是一回事
那这个就有BUG了 后续我也没看见签名进来. 我现在差不多50%的订单都卡在中间状态
收不到回调要先看是自己没有收到还是自己代码写的有问题没有正常处理,可以拿420单号找在线技术支持查日志
420
现在有个疑问, 微信文档写的很清楚. 流量探测会因为服务端发送400后, 会发送正确的签名? 那这句话写了跟白写一样?
探测流量不会因为你给400/500 就会重复下发
那怎么办 给用户发送的金额. 后面也没有通知发给我
正常的通知下发和探测流量不冲突,不是一回事
那这个就有BUG了 后续我也没看见签名进来. 我现在差不多50%的订单都卡在中间状态
收不到回调要先看是自己没有收到还是自己代码写的有问题没有正常处理,可以拿420单号找在线技术支持查日志
你这一半以上收不到回调,大概率不是探测流量的问题,无论你对探测流量回复什么,都不影响正常的通知下发,正常流量是400后会重试;探测流量是非40x/50x会重试,最多试过-2次每天
你这一半以上收不到回调,大概率不是探测流量的问题,无论你对探测流量回复什么,都不影响正常的通知下发,正常流量是400后会重试;探测流量是非40x/50x会重试,最多试过-2次每天
那我这个情况不止了. 1.目前在测试阶段. 正常签名已经返过200. 后续没有再发. 这个是正确的. 2.在打款成功后,我查看过日志.只有流量探测. 没有正常签名进入过.
我再贴一张.controller的操作.帮忙看下是否这个的问题.
你这是什么接口?商家转账?品牌红包?
你这是什么接口?商家转账?品牌红包?
商户转账零钱,遇到一样问题,每天都会有一个签名探测,验证失败后没有回调正常签名