使用了定时更新平台证书功能,并且使用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 呀,需要转换一下。
已解决。多谢