header: {"nonce":"UqfMeJR3A5rSzMzGWjeEPjlQ6qIJ5LYG","serial":"PUB_KEY_ID_0117140904342025041500441584001200","signature":"M2D/bZraMdFVtsYwgCsna1n6+CfHBSoAIRl5zbpCVZOjB3/q7n26yzzWwAl7nLvPh94mJeyDzhJ1sd9MQZv+eWMUw6sCXmpxm/lA6jiF8e5jpfnqRVFyUs4hSkbRYTDQ8rzQEKGenM75lkE0Rxm6IDBXLWo+Vro3CEOI3/RIdBRe8ajgOyqDJzB6dH2ZjAZmquEayXMKMmtdbR64/Z2vVmoatEtQBk1Oeu1mtepkx5b5b13umQl1MZogVZiO93Dl1+BOuQdziBbeyhF64Hyzn9SiolGc4QFi08370BNqrv0R67biAiEP5jo+N1xeg1Txj4h4Zgk8rKPkvA+rOas4JA==","timeStamp":"1751026276"}
这是回调的请求体,然后解析报错java.lang.NumberFormatException: For input string: "PUB" under radix 16
你好,上面报错是因为你的代码只支持16进制的wechatpay-serial,核实你的商户号是平台证书方案,但开启了公钥切换的灰度,回调场景已经自动灰度了一小部分用公钥,PUB_XXX为公钥ID。
微信支付公钥和平台证书都是用于v3版本接口的验签及敏感信息加密,公钥没有有效期,便于维护,建议使用公钥方案:https://pay.weixin.qq.com/doc/v3/merchant/4012153196
我们SDK也已经兼容公钥方案,具体请看下https://github.com/wechatpay-apiv3/wechatpay-java
----
特殊原因必须要用平台证书方案的话,可以在“商户平台 → 账户中心 → API安全 → 微信支付公钥”这里关闭切换,即可退回到平台证书
1、微信平台证书(用工具下载 或接口下载两种方式获取)-- ---可以获取到 【微信平台证书序列号】和和密文ciphertext,解密后可以得到平台证书内容。
平台证书文件名类似于wechatpay_123456777B4A9CC78902B44B65E04B9751CE12.pem
2、微信支付公钥,替代1的微信支付平台证书,商户后台申请下载。
公钥id类似:PUB KEY ID 0117000800002025045698789500001779
(1和2二选一用于回调和响应验签)
你当前回调返回的是公钥,需要使用公钥验签。https://pay.weixin.qq.com/doc/v3/partner/4012069852?from=https%3A%2F%2Fpay.weixin.qq.com%2Fdocs%2Fpartner%2Fproducts%2Fpartner-jsapi-payment%2Fintroduction.html
舅舅/(ㄒoㄒ)/~~ 为什么都没有用公钥 他回调给我传公钥的