服务商分账时使用服务商的证书提示:商户未申请过证书。请到商户平台上申请证书授权机构颁发的证书
请求分账时需要再请求头中添加 Wechatpay-Serial 参数,对于普通商户使用自己的证书自动更新平台证书是可以的,但是如果是特约商户,使用服务商的证书就报错了。更新证书时 statusCode = 401 {"code":"SIGN_ERROR","message":"商户未申请过证书。请到商户平台上申请证书授权机构颁发的证书。详情可参考:http://kf.qq.com/faq/180824JvUZ3i180824YvMNJj.html。"} public static X509CertImpl x509Cert(String merchantId,WxConfDTO confDTO){
try {
byte[] bytes = FileUtil.httpBytes(confDTO.getPrivateFilePath());
PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new String(bytes, StandardCharsets.UTF_8));
// 获取证书管理器实例
CertificatesManager certificatesManager = CertificatesManager.getInstance();
// 向证书管理器增加需要自动更新平台证书的商户信息
certificatesManager.putMerchant(merchantId, new WechatPay2Credentials(merchantId,
new PrivateKeySigner(confDTO.getSerialNo(), merchantPrivateKey)),
confDTO.getPrivateKey().getBytes(StandardCharsets.UTF_8));
// 从证书管理器中获取verifier
Verifier verifier = certificatesManager.getVerifier(merchantId);
return (X509CertImpl) verifier.getValidCertificate();
} catch (Exception e) {
log.error("x509CertError,{},{}",merchantId,confDTO);
throw new BaseException("获取加密信息异常!");
}
}