小程序
小游戏
企业微信
微信支付
扫描小程序码分享
大部分支付回调都是正常的,有一两个回调报错 java.security.SignatureException: Signature length not correct: got 254 but was expecting 256
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
public WebResultDTO<String> wxPayNotify(String wechatpaySerial, String wechatpaySignature,
String wechatpayTimestamp, String wechatpayNonce, String callback) {
NotificationRequest request = new NotificationRequest.Builder().withSerialNumber(wechatpaySerial)
.withNonce(wechatpayNonce)
.withTimestamp(wechatpayTimestamp)
.withSignature(wechatpaySignature)
.withBody(callback)
.build();
log.info("==wxPayNotify wechatpaySerial={} wechatpayNonce={} wechatpayTimestamp={} wechatpaySignature={} callback={} ",wechatpaySerial, wechatpayNonce, wechatpayTimestamp, wechatpaySignature, callback);
NotificationHandler handler = new NotificationHandler(verifier, merchantSecret.getBytes(StandardCharsets.UTF_8));
try {
// 验签和解析请求体
Notification notification = handler.parse(request);
// 从notification中获取解密报文
log.info("===getDecryptData=={}",notification.getDecryptData());
}catch(Exception exc) {
log.error(exc.getMessage(), exc);
}
return WebResultDTO.succ("ok");
验证失败提示
Signature length not correct: got 24 but was expecting 256
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
上面这个是有问题的签名,校验报错;
这个是正确的签名,校验通过 ;
两种都是对方返过来的。
验签方法:
256/64=4, 254/64=3.96875,这个问题应该和base64编码相关,签名值末尾的等号(=)是base64填充值,有可能有0、1、2个,不能省略,估计楼主的签名获取时,把等号给忽略掉了,建议给个样本看看。
给个报错的签名例子?
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
public WebResultDTO<String> wxPayNotify(String wechatpaySerial, String wechatpaySignature,
String wechatpayTimestamp, String wechatpayNonce, String callback) {
NotificationRequest request = new NotificationRequest.Builder().withSerialNumber(wechatpaySerial)
.withNonce(wechatpayNonce)
.withTimestamp(wechatpayTimestamp)
.withSignature(wechatpaySignature)
.withBody(callback)
.build();
log.info("==wxPayNotify wechatpaySerial={} wechatpayNonce={} wechatpayTimestamp={} wechatpaySignature={} callback={} ",wechatpaySerial, wechatpayNonce, wechatpayTimestamp, wechatpaySignature, callback);
NotificationHandler handler = new NotificationHandler(verifier, merchantSecret.getBytes(StandardCharsets.UTF_8));
try {
// 验签和解析请求体
Notification notification = handler.parse(request);
// 从notification中获取解密报文
log.info("===getDecryptData=={}",notification.getDecryptData());
}catch(Exception exc) {
log.error(exc.getMessage(), exc);
}
return WebResultDTO.succ("ok");
}
验证失败提示
Signature length not correct: got 24 but was expecting 256
上面这个是有问题的签名,校验报错;
这个是正确的签名,校验通过 ;
两种都是对方返过来的。
验签方法:
256/64=4, 254/64=3.96875,这个问题应该和base64编码相关,签名值末尾的等号(=)是base64填充值,有可能有0、1、2个,不能省略,估计楼主的签名获取时,把等号给忽略掉了,建议给个样本看看。
给个报错的签名例子?