wechatpay-apiv3 / wechatpay-java

微信支付 APIv3 的官方 Java Library
Apache License 2.0
870 stars 195 forks source link

发起商家转账接口报错:平台证书序列号Wechatpay-Serial错误 #200

Closed chenxin1215 closed 1 year ago

chenxin1215 commented 1 year ago

错误描述

商户转账到零钱 调用发起商家转账接口返回:{"code":"PARAM_ERROR","message":"平台证书序列号Wechatpay-Serial错误"}

重现bug的步骤

调用transferBatchService.initiateBatchTransfer();

预期行为

错误的http返回

导致错误的代码片段

初始化代码:
 try {
                DefaultResourceLoader defaultResourceLoader = new DefaultResourceLoader();
                RSAConfig config =
                        new RSAConfig.Builder()
                                .merchantId(wxpayMchid)
                                .privateKeyFromPath(defaultResourceLoader.getResource(privatekeypath).getURL().getPath())
                                .merchantSerialNumber(merchantSerialNumber)
                                .wechatPayCertificatesFromPath(defaultResourceLoader.getResource(privatecertpath).getURL().getPath())
                                .build();
                TransferBatchService transferBatchService = new TransferBatchService.Builder().config(config).build();
                transferBatchServiceMap.put(alias, transferBatchService);
            } catch (Exception e) {
                log.error("初始化构建商户接口异常 wxpayMchid:{}, e: ", wxpayMchid, e);
            }

调用接口代码:
TransferBatchService transferBatchService = WxTransferBatchConfiguration.transferBatchServiceMap.get(alias);
      request.setAppid(appid);
      request.setTransferSceneId(WxTransferBatchConfiguration.TRANSFER_SCENE_ID);
     transferBatchService.initiateBatchTransfer(request);

操作系统

window

Java 版本

8

wechatpay-java 版本

v0.2.7

其他信息

No response

xy-peng commented 1 year ago

wechatPayCertificatesFromPath 要传微信支付平台证书

RSAConfig config =
        new RSAConfig.Builder()
                .merchantId(wxpayMchid)
                .privateKeyFromPath(defaultResourceLoader.getResource(privatekeypath).getURL().getPath())
                .merchantSerialNumber(merchantSerialNumber)
                .wechatPayCertificatesFromPath(defaultResourceLoader.getResource(privatecertpath).getURL().getPath())
                .build();

看代码,你使用的是 privatecertpath,是不是用成了商户API证书?

chenxin1215 commented 1 year ago
privatecertpath

要获取微信支付平台证书不是要调用接口拿嘛?(用CertificateService类)但是我现在要调用接口的话得先拿到RSAConfig; 问题是RSAConfig这个生成又需要微信支付平台证书 这不是套娃了?

xy-peng commented 1 year ago

可以参考 自动更新平台证书