wechatpay-apiv3/wechatpay-java

 java.lang.IllegalArgumentException: Last unit does not have enough valid bits错误

Closed this issue · 7 comments

错误描述

在回调通知做验签的时候出现这个错误,之前都是正常的,只是最近偶尔会出现上述标题错误,请问最近有啥优化吗
原因是因为编码后的签名长度不符合要求(要求是4的倍数)

重现bug的步骤

1.验签名串:
应答时间戳\n
应答随机串\n
应答报文主体\n
2.获取签名
3.验证签名

预期行为

预期返回验签成功

导致错误的代码片段

之前验证过都是正常验签通过的,没改动过逻辑,只是最近获取微信回调通知,偶尔会出现 java.lang.IllegalArgumentException: Last unit does not have enough valid bits错误,麻烦看下是不是回调的header里面的签名串编码出现

操作系统

Win10

Java 版本

Java8

wechatpay-java 版本

v0.0.1

其他信息

麻烦大佬帮忙看下

应该是遇到了探测的流量

验签失败是正常的。探测的通知回调,随后会使用正确的签名重试的。

应该是遇到了探测的流量

验签失败是正常的。探测的通知回调,随后会使用正确的签名重试的。

嗯嗯 确实是探测的通知回调,但是我这边返回403状态码,没有收到微信侧的再次通知

应该是遇到了探测的流量

验签失败是正常的。探测的通知回调,随后会使用正确的签名重试的。

麻烦帮忙看下为啥我返回403,没有收到微信的二次通知请求

请你提供具体的日志,例如完整的回调报文。

请你提供具体的日志,例如完整的回调报文。

入参:{"summary":"代金券核销通知","wechatPayTimestamp":"1695104974","event_type":"COUPON.USE","create_time":"2023-09-19T14:29:33+08:00","wechatPaySerial":"1450383EF6A6B2F91FE8E01393E4D6333DEB9BD1","resource":{"original_type":"coupon","algorithm":"AEAD_AES_256_GCM","ciphertext":"n4HoTg3cjoGqOxPr/fUCTjpXEKA148APrK43Vkm4up+bFw8p99gsGMQUziJ3JZM1lrt0Zg/rH14Zcaedo6R1U1YIloes2I/STx9DA5w2p963ZiJlus8G4cZ43texW5Z1Ng6Y0SpdONX5Me9pJ1OBYEd8LshuFzdS5coEk7eb4N3GHoaWkvRRJRCufszlanPgCl/Rab2cEXOgCoznuvMEelrXVcXrQBb+pF9S0tPQh8dDQVRy5JvEpFu8pP1LqQ/PuBFEnftH9Y7cfbNs5bM2FzuHgAU8+ZpIKRg5mDj0rzdJlfmMOgkgz8LKocMhNKig417u8ANaFePhfUtEO0TVpmpKpuQo/adulEiX/ZOVz9pPfiAMSWM+WUiyfjRPHKwbChu4PXs7f+ubX1JWIjN6ZvZ79/+IAtITXeEwrQk4u6XIz2bAJG3yvbt/QEXNMcz9hm3uyx2TBUz1hCSu4bt7SQWneRO6anc5WZAlHY+fw6NB+2Sp4YAjbJuNKtSmLr+2vk95RbYh/t2BKxq1JmSWxelOrXmcTFDd01s5CXK/AKlfqmaXDd5yCAEIRt51BtWQDtCBvSXFtx6xp20Pbns4pN5cvlAwW8zniyBBQz8wyzlGcYVmfcY5Wc6TmjYaHW8yqbtG95O358GC1PbWk7i5ovmMqQeuRxMgHeITX5yQVVkAdf0wp42jIqpxKmw6JWqbwFJbIVnnUkMu6aegXd9kXdU16L5XuNdJp0NhWRuk+NEHA4JHyWSNcdFDofYxNg9/1IWvfhKNTGDnh7DdlOmEV5ILd2qL","associated_data":"coupon","nonce":"Th9CTdHTTC3m"},"resource_type":"encrypt-resource","id":"922a2a8c-58e1-5e4b-9da5-a2b63cd6f8cc","wechatPaySignature":"WECHATPAY/SIGNTEST/sCj+wltnes+jAEL4+pHJPEPqUQCNC4uvsXUF+ihveWcxHC0uXBXKnjsCrC9veJdwHutpG9erfRcFs10te34K8BlxdPYEMa6Ipzdw+Y5Wr7iHL7oL9E/5C0FiW2/wRfpJv5KDUhQPVL7A9poGCpIvD0N6x6Nt/6ZIQSIVh/dvtPKWe/3Hoo2kqj8U/9N7PFEMHIXPrdKeU2QliPhkkD6Lyt4gdxxv1QPMzafPwfFd57x8JmaDVaGj6PWr2+nOibYrwanSXRxZxJrYSFJRlVxGxvaPJ0uPqz5Qed7hNeoneoM8tGj+F88DGiDSfbWggkyEsCYkI6sGbwzuRA==","wechatPayNonce":"9xVcYT5jTPm3bTu98lcerFAS5LANwHHM"}
出参:{"result":{"code":"403","message":"FAIL","class":"com.jd.digital.coupon.domain.dto.ResponseResultDTO"}}
上述为网关侧的回调报文,入参为微信侧来的报文,出参为我返给微信的报文,目前还没收到微信侧的二次消息,麻烦帮忙看下

callback_http_resp_body: {"resultData":{"code":"403";"message":"FAIL"};"success":true;"resultCode":0;"resultMsg":"成功";"channelEncrypt":0}
callback_http_status_code: 200

你的应答是这样的。真实的HTTP状态码是200,只是报文中的code是403。微信支付只看HTTP状态码,会认为商户服务端处理成功了。

callback_http_resp_body: {"resultData":{"code":"403";"message":"FAIL"};"success":true;"resultCode":0;"resultMsg":"成功";"channelEncrypt":0}
callback_http_status_code: 200

你的应答是这样的。真实的HTTP状态码是200,只是报文中的code是403。微信支付只看HTTP状态码,会认为商户服务端处理成功了。

好的 感谢回复!