wechatpay-apiv3 / wechatpay-java

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

v3支付不能支持多商户 #173

Closed wweiaixingxing closed 1 year ago

wweiaixingxing commented 1 year ago

您的功能请求与问题有关吗? 请描述您遇到的问题

有两个商户收款,但是v3版本不能初始化多个商户配置

描述您想要的解决方案

根据商户号自动初始化支付参数,证书

您还有其他的方案吗?

No response

其他信息

No response

wweiaixingxing commented 1 year ago

其他方案 可以提供在CertificateProvider 接口 提供删除此 ConcurrentHashMap<BigInteger, X509Certificate> certificates = new ConcurrentHashMap<>() 方法,重新构建支付参数不报错 RSAAutoCertificateConfig.Builder builder = new RSAAutoCertificateConfig.Builder(); //商户号 builder.merchantId(merchant.getMerchantNo()) .privateKey(merchant.getApiClientKey().split(",")[0]) .merchantSerialNumber(merchant.getMerchantSerialNo().split(",")[0]) //只能用pem .apiV3Key(merchant.getApiKey()) .build(); //通过构造函数产生 beanDefinitionBuilder.addConstructorArgValue(builder); // 注册bean defaultListableBeanFactory.registerBeanDefinition(name, beanDefinitionBuilder.getRawBeanDefinition());

wweiaixingxing commented 1 year ago

@xy-peng 多商户功能新增了吗?

xy-peng commented 1 year ago

一直是可以支持多个商户的,每个商户构造一个自己的 Config 即可。

你遇到了什么具体的问题吗?

hppx5456 commented 1 year ago

服务商模式的支付回调// 如果已经初始化了 RSAAutoCertificateConfig,可直接使用 // 没有的话,则构造一个 NotificationConfig config = new RSAAutoCertificateConfig.Builder() .merchantId(merchantId) .privateKeyFromPath(privateKeyPath) .merchantSerialNumber(merchantSerialNumber) .apiV3Key(apiV3key) .build(); 这里需要merchantId,我的业务场景是服务商下的特约商户进行支付,那么回调的时候这个merchantId该传什么值呢,如果传特约商户的merchantId,这时我有多个特约商户又该怎么确定是那个呢

xy-peng commented 1 year ago

我的建议是,不同的商户使用不同的回调路径,这样就能识别不同的商户了。例如,将商户号的摘要放到回调路径中。

timber0725 commented 1 year ago

我的建议是,不同的商户使用不同的回调路径,这样就能识别不同的商户了。例如,将商户号的摘要放到回调路径中。

大牛我这里有一个问题 不好解决 是我的商户配置是从mysql中读取的 考虑的问题就是如果修改了去重新创建RSAAutoCertificateConfig 但问题就在于微信并没有提供更新配置信息的方法 现在无法更新 如果您有什么建议请联系我 xiaoGdeweixin99 微信 谢谢

xy-peng commented 1 year ago

@timber0725 请见 #202 和 #194