收藏
回答

微信支付服务商支付成功回调验证签名报错?

大部分支付回调都是正常的,有一两个回调报错 java.security.SignatureException: Signature length not correct: got 254 but was expecting 256

回答关注问题邀请回答
收藏

4 个回答

  • 荀羽
    荀羽
    2023-04-25

    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

    2023-04-25
    有用
    回复
  • Hasky
    Hasky
    2021-08-20

    上面这个是有问题的签名,校验报错;

    这个是正确的签名,校验通过 ;

    两种都是对方返过来的。

    验签方法:

    2021-08-20
    有用
    回复
  • 北望沣渭
    北望沣渭
    2021-08-20

    256/64=4, 254/64=3.96875,这个问题应该和base64编码相关,签名值末尾的等号(=)是base64填充值,有可能有0、1、2个,不能省略,估计楼主的签名获取时,把等号给忽略掉了,建议给个样本看看。

    2021-08-20
    有用
    回复 1
    • ㅤㅤㅤㅤ
      ㅤㅤㅤㅤ
      2021-08-20
      256 是字节数组的长度,如果是 Base64 字符串的话应该长度是 344 才对。它这个就很奇葩,看起来不像是丢了等号的问题(Java 里即便等号省略也是可以正常识别的)
      2021-08-20
      回复
  • ㅤㅤㅤㅤ
    ㅤㅤㅤㅤ
    2021-08-19

    给个报错的签名例子?

    2021-08-19
    有用
    回复
登录 后发表内容