@@ -64,13 +64,15 @@ payService.setMultiConfig(configMap);
6464WxPayConfig config1 = payService. getConfig(" 1234567890" , " wx1111111111111111" );
6565
6666// 仅使用商户号获取配置(会返回该商户号的任意一个配置)
67+ // 注意:当存在多个 appId 时,返回结果基于内部存储顺序,不应依赖其稳定性
6768WxPayConfig config = payService. getConfig(" 1234567890" );
6869
69- // 使用获取的配置进行支付操作
70+ // 使用获取的配置读取信息(仅用于读取配置,不用于执行支付操作)
7071if (config != null ) {
7172 String appId = config. getAppId();
7273 String mchKey = config. getMchKey();
73- // ... 使用配置信息
74+ String apiV3Key = config. getApiV3Key();
75+ // ... 使用配置信息进行业务逻辑判断或记录
7476}
7577```
7678
@@ -80,9 +82,14 @@ if (config != null) {
8082- 线程安全,不会因为线程切换导致配置丢失
8183- 可以同时获取多个不同的配置
8284
85+ ** 使用场景** :
86+ - 仅需读取配置信息(如获取 mchKey、appId 等)
87+ - 不需要执行 WxPayService 的支付相关方法
88+ - 如需执行支付操作,请使用方式二的 switchover 方法
89+
8390#### 方式二:切换配置后使用(原有方式)
8491
85- 通过切换配置,然后调用 ` getConfig() ` 获取当前配置 :
92+ 通过切换配置,然后调用 ` getConfig() ` 获取当前配置或直接执行支付操作 :
8693
8794``` java
8895// 精确切换到指定的配置
@@ -92,10 +99,17 @@ WxPayConfig config = payService.getConfig(); // 获取当前切换的配置
9299// 仅使用商户号切换
93100payService. switchover(" 1234567890" );
94101config = payService. getConfig(); // 获取切换后的配置
102+
103+ // 切换后可直接执行支付操作
104+ WxPayUnifiedOrderResult result = payService. unifiedOrder(request);
95105```
96106
97107** 注意** :此方式依赖 ThreadLocal,需要注意线程上下文的问题。
98108
109+ ** 使用场景** :
110+ - 需要执行 WxPayService 的支付相关方法(如 unifiedOrder、refund 等)
111+ - 在同一线程中连续执行多个支付操作
112+
99113### 3. 切换配置的方式
100114
101115#### 方式一:精确切换(原有方式,向后兼容)
@@ -239,19 +253,19 @@ public void processMerchantOrder(String mchId, String appId, Order order) {
239253 // ... 处理订单逻辑
240254}
241255
242- // 或者在不确定 appId 的情况下
256+ // 或者在不确定 appId 的情况下,仅通过商户号发起退款
243257public void processRefund(String mchId, String outTradeNo) {
244- // 获取该商户号的任意一个配置
245- WxPayConfig config = payService. getConfig(mchId);
246-
247- if (config == null ) {
248- log. error(" 找不到商户配置:mchId={}" , mchId);
258+ // 直接根据商户号切换(内部会选择该商户号下的一个配置)
259+ if (! payService. switchover(mchId)) {
260+ log. error(" 商户配置切换失败:mchId={}" , mchId);
249261 return ;
250262 }
251263
252- // 先切换到该配置,然后进行退款
253- payService. switchover(mchId, config. getAppId());
254- // ... 执行退款操作
264+ // 在完成上下文切换后,执行退款操作
265+ WxPayRefundRequest request = new WxPayRefundRequest ();
266+ request. setOutTradeNo(outTradeNo);
267+ // ... 设置其他退款参数
268+ WxPayRefundResult refundResult = payService. refund(request);
255269}
256270```
257271
0 commit comments