wechatpay-apiv3 / wechatpay-java

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

希望可以动态更新配置,比如商户的api秘钥和证书修改了,不重启可以修改对应的配置 #150

Closed ttddss closed 1 year ago

ttddss commented 1 year ago

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

微信配置是放在数据库的,多商户情况下,用户修改配置后,希望不重启服务能更新支付配置 image

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

ttddss commented 1 year ago

是否我只要把provider的httpclient重新创建一个新的就好了

xy-peng commented 1 year ago

微信配置是放在数据库的

【微信配置】是指微信支付平台证书?还是商户API私钥、商户API证书序列号?从你提到的内容来看,应该是商户API私钥配置,然后走自动下载微信支付平台证书吧。

是否我只要把provider的httpclient重新创建一个新的就好了

目前不行,因为只能根据之前的配置下载微信支付平台证书。

如何解决你的问题呢?之前考虑过这种情况,不过先要手写的代码有些多:先实现 Signer 从远程数据库取配置,然后把它注入 Credential,再拿着 Credential 得到 RSAAutoCertificateProvider,进而得到 Validator,最后再构造 HttpClient

晚点我提供一个辅助的 Config 类,让过程变得简单,找个时间写一个指南放到 wiki 上吧。

ttddss commented 1 year ago

好的

ttddss commented 1 year ago

我把能想到的配置都通过反射更新了下如果数据库配置有更新的话,测了下好像没问题,可以的话看下这样子可以不 image

xy-peng commented 1 year ago

你遗漏了 certificateProvider

设计是 Config 对象不可变的。通过反射改变的话,我不敢保证没问题。

ttddss commented 1 year ago

certificateProvider我也更新了对应的httpClient和aeadCipher属性