wechatpay-apiv3/wechatpay-java

热更新config配置

Closed this issue · 8 comments

ytlrr0 commented

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

image 如上所示代码块,导致了商户config对象,无法热更新,这块对商户管理服务来说不太友好。我们现在是自己继承了代码重写很多代码实现的。希望能提供这样的能力。

描述您想要的解决方案

config对象自己实现,AbstractAutoCertificateProvider也要自己实现一个
RSACertificateConfig是我们config的实现
image
核心是build使用我们重写provider
image

config创建时,判断当前config在内存中是否存在,如果不存在再创建。
image
RSACertificateProvider对象是我们继承AbstractAutoCertificateProvider并增加一个map来存储商户和config的关系。
image
getRSACertificateConfig 方法实现如下
image

您还有其他的方案吗?

No response

其他信息

sdk版本:wechatpay-java:0.2.5

#194 是使用单一线程,串行更新添加过的商户的微信支付平台证书,并且提供对应的商户配置更新机制。

有一个待修改点:在更新商户配置时,是否要实时下载平台证书,并当配置错误导致下载失败时抛出异常。这样能减小更新时出现使用方难以感知的失败。不过,写代码时得要处理对应的异常。

欢迎 @ytlrr0 提出自己的建议和意见。

ytlrr0 commented

能否提供对外删除config的api。因为配置错误在支付api调用过程中可以感知,也就是在支付出现异常时,可以清理错误配置。
我之前是重写这部分map提供可根据商户id删除配置的方法。

ytlrr0 commented
image

调用支付预下单,被扫等api时 出现异常,清理配置。

image

能否提供对外删除config的api。因为配置错误在支付api调用过程中可以感知,也就是在支付出现异常时,可以清理错误配置。 我之前是重写这部分map提供可根据商户id删除配置的方法。

AutoCertificateService.unregister() 方法。不过设计是对内部使用的方法,我考虑下。

调用支付预下单,被扫等api时 出现异常,清理配置。

为什么这么设计呢?

ytlrr0 commented

这样设计的原因是我们商户配置管理功能目前不能提供证书配置正确与否的校验,因为财务等的要求以及和其他系统之间的数据平衡,所以我们不能直接通过支付一笔来验证配置,而我们的商户信息证书等信息都是从各个地市收集上来的,数据经过excel转换,字符错误,换行符空格等,这些管理要求,我们没法改变,所以导致配置的错误率很高。所以我们的支付过程中一般存在问题,绝大多数情况下都是配置错误,所以我们就一刀切的做了这样一种选择,只要存在支付错误就清理内存config对象

不需要单独的检查API,下载微信支付平台证书验证配置是否正确即可。

计划在构造 Config 时,如果不能下载平台证书,就尽早地报错。这样也符合“快速失败”的API设计原则。

ytlrr0 commented

不需要单独的检查API,下载微信支付平台证书验证配置是否正确即可。

计划在构造 Config 时,如果不能下载平台证书,就尽早地报错。这样也符合“快速失败”的API设计原则。

妙啊,这样确实更合理,期待新版本