wechatpay-apiv3/wechatpay-apache-httpclient

使用了定时更新平台证书功能,并且使用Verifier在调用接口时获取平台证书。但是怎么获取平台证书序列号以满足接口对header里的Wechatpay-Serial的需求呢

Daxiangshen opened this issue · 9 comments

使用了定时更新平台证书功能,并且使用Verifier在调用接口时获取平台证书。但是怎么获取平台证书序列号以满足接口对header里的Wechatpay-Serial的需求呢

// 建议从Verifier中获得微信支付平台证书,或使用预先下载到本地的平台证书文件中
X509Certificate certificate = verifier.getValidCertificate();
try {
  String ciphertext = RsaCryptoUtil.encryptOAEP(text, certificate);
} catch (IllegalBlockSizeException e) {
  e.printStackTrace();
}

这样拿到证书,然后从 X509Certificate 获取。

可是为什么我用certificate.getSerialNumber()获取到的序列号和正确的序列号不一样

也就是说我将certificate.getSerialNumber()获取到的序列号传入header之后。微信API提示我序列号错误。我用工具获取到的序列号和这个序列号不一样,但是可以通过微信的API接口

// 建议从Verifier中获得微信支付平台证书,或使用预先下载到本地的平台证书文件中
X509Certificate certificate = verifier.getValidCertificate();
try {
  String ciphertext = RsaCryptoUtil.encryptOAEP(text, certificate);
} catch (IllegalBlockSizeException e) {
  e.printStackTrace();
}

这样拿到证书,然后从 X509Certificate 获取。

可是为什么我用certificate.getSerialNumber()获取到的序列号和正确的序列号不一样
也就是说我将certificate.getSerialNumber()获取到的序列号传入header之后。微信API提示我序列号错误。我用工具获取到的序列号和这个序列号不一样,但是可以通过微信的API接口

certificate.getSerialNumber().toString(HEX).toUpperCase(),是这样获取的吗?

certificate.getSerialNumber().toString(HEX).toUpperCase(),是这样获取的吗?

HEX类是哪个包下面呢?

certificate.getSerialNumber().toString(HEX).toUpperCase(),是这样获取的吗?

我是直接获取的certificate.getSerialNumber() 后面没有.toString(HEX).toUpperCase() 这个HEX指的是?

就是16,表示16进制。证书序列号是16进制的字符串,getSerialNumber()得到的是 BigInteger 呀,需要转换一下。

已解决。多谢