Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

热更新config配置 #202

Closed
ytlrr0 opened this issue Jul 12, 2023 · 8 comments · Fixed by #194
Closed

热更新config配置 #202

ytlrr0 opened this issue Jul 12, 2023 · 8 comments · Fixed by #194

Comments

@ytlrr0
Copy link

ytlrr0 commented Jul 12, 2023

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

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

@xy-peng xy-peng linked a pull request Jul 12, 2023 that will close this issue
@xy-peng
Copy link
Contributor

xy-peng commented Jul 12, 2023

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

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

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

@ytlrr0
Copy link
Author

ytlrr0 commented Jul 12, 2023

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

@ytlrr0
Copy link
Author

ytlrr0 commented Jul 12, 2023

image

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

image

@xy-peng
Copy link
Contributor

xy-peng commented Jul 12, 2023

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

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

@xy-peng
Copy link
Contributor

xy-peng commented Jul 12, 2023

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

为什么这么设计呢?

@ytlrr0
Copy link
Author

ytlrr0 commented Jul 13, 2023

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

@xy-peng
Copy link
Contributor

xy-peng commented Jul 13, 2023

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

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

@ytlrr0
Copy link
Author

ytlrr0 commented Jul 13, 2023

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants