收藏
回答

服务商分账时使用服务商的证书提示:商户未申请过证书。请到商户平台上申请证书授权机构颁发的证书

请求分账时需要再请求头中添加 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("获取加密信息异常!");
    }
}


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

2 个回答

  • Memory
    Memory
    2024-12-17

    谁调用接口就使用谁的证书

    2024-12-17
    有用 1
    回复 3
    • fkstart
      fkstart
      2024-12-17
      是服务商调用的接口,用的也是服务商的证书呢。为什么会提示商户未申请过证书。请到商户平台上申请证书授权机构颁发的证书。呢
      2024-12-17
      回复
    • Memory
      Memory
      2024-12-17回复fkstart
      你肯定搞串号了
      2024-12-17
      回复
    • fkstart
      fkstart
      2024-12-17
      我找到问题了,不应该用子商户的商户号和服务商的证书混用
      2024-12-17
      回复
  • fkstart
    fkstart
    2024-12-17

    难道子商户的分账不能使用服务商的证书吗?只能使用子商户的证书?

    2024-12-17
    有用
    回复
登录 后发表内容