wechatpay-java icon indicating copy to clipboard operation
wechatpay-java copied to clipboard

IllegalArgumentException: Last unit does not have enough valid bits

Open ylx19931228 opened this issue 1 year ago • 13 comments

错误描述

有关微信探测流量问题。服务端已发送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"}}

返回参数为: 123 400

重现bug的步骤

  1. 微信探测流量 header。
  2. 解密出现错误,进行捕捉。
  3. 捕捉完成后,返回http code 为 400
  4. 返回成功后,微信商户未再次给服务端发送正确的签名。 123

预期行为

  1. 探测流量发送后,服务端已返回400 请求码。
  2. 微信支付,再次发送正确参数。给到服务端。

导致错误的代码片段

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

ylx19931228 avatar Dec 02 '24 03:12 ylx19931228

https://support.pay.weixin.qq.com/online-service 可以用订单号等信息,通过在线技术支持渠道反馈问题排查

wswdavid avatar Dec 02 '24 09:12 wswdavid

https://support.pay.weixin.qq.com/online-service 可以用订单号等信息,通过在线技术支持渠道反馈问题排查

AI开发助手? 这个没有用

ylx19931228 avatar Dec 02 '24 09:12 ylx19931228

探测流量不会因为你给400/500 就会重复下发

Memory-9527 avatar Dec 02 '24 11:12 Memory-9527

探测流量不会因为你给400/500 就会重复下发

那怎么办 给用户发送的金额. 后面也没有通知发给我

ylx19931228 avatar Dec 02 '24 11:12 ylx19931228

探测流量不会因为你给400/500 就会重复下发

那怎么办 给用户发送的金额. 后面也没有通知发给我

正常的通知下发和探测流量不冲突,不是一回事

Memory-9527 avatar Dec 02 '24 11:12 Memory-9527

探测流量不会因为你给400/500 就会重复下发

那怎么办 给用户发送的金额. 后面也没有通知发给我

正常的通知下发和探测流量不冲突,不是一回事

那这个就有BUG了 后续我也没看见签名进来. 我现在差不多50%的订单都卡在中间状态

ylx19931228 avatar Dec 02 '24 11:12 ylx19931228

探测流量不会因为你给400/500 就会重复下发

那怎么办 给用户发送的金额. 后面也没有通知发给我

正常的通知下发和探测流量不冲突,不是一回事

那这个就有BUG了 后续我也没看见签名进来. 我现在差不多50%的订单都卡在中间状态

收不到回调要先看是自己没有收到还是自己代码写的有问题没有正常处理,可以拿420单号找在线技术支持查日志

Memory-9527 avatar Dec 02 '24 12:12 Memory-9527

420

现在有个疑问, 微信文档写的很清楚. 流量探测会因为服务端发送400后, 会发送正确的签名? 那这句话写了跟白写一样?

ylx19931228 avatar Dec 02 '24 12:12 ylx19931228

探测流量不会因为你给400/500 就会重复下发

那怎么办 给用户发送的金额. 后面也没有通知发给我

正常的通知下发和探测流量不冲突,不是一回事

那这个就有BUG了 后续我也没看见签名进来. 我现在差不多50%的订单都卡在中间状态

收不到回调要先看是自己没有收到还是自己代码写的有问题没有正常处理,可以拿420单号找在线技术支持查日志

321

ylx19931228 avatar Dec 02 '24 12:12 ylx19931228

你这一半以上收不到回调,大概率不是探测流量的问题,无论你对探测流量回复什么,都不影响正常的通知下发,正常流量是400后会重试;探测流量是非40x/50x会重试,最多试过-2次每天

Memory-9527 avatar Dec 02 '24 12:12 Memory-9527

你这一半以上收不到回调,大概率不是探测流量的问题,无论你对探测流量回复什么,都不影响正常的通知下发,正常流量是400后会重试;探测流量是非40x/50x会重试,最多试过-2次每天

那我这个情况不止了. 1.目前在测试阶段. 正常签名已经返过200. 后续没有再发. 这个是正确的. 2.在打款成功后,我查看过日志.只有流量探测. 没有正常签名进入过.

我再贴一张.controller的操作.帮忙看下是否这个的问题. 1233

ylx19931228 avatar Dec 03 '24 03:12 ylx19931228

你这是什么接口?商家转账?品牌红包?

Memory-9527 avatar Dec 03 '24 07:12 Memory-9527

你这是什么接口?商家转账?品牌红包?

商户转账零钱,遇到一样问题,每天都会有一个签名探测,验证失败后没有回调正常签名

yibanyangcong avatar Dec 31 '24 04:12 yibanyangcong