Skip to content

Commit 2dc2da0

Browse files
authored
🎨 #4001 【微信支付】为普通商户版退款请求对象类补齐与服务商版一致的“退款资金来源/出资账户明细”参数,以支持在 V3 退款申请时指定退款来源资金账户
1 parent b882c67 commit 2dc2da0

2 files changed

Lines changed: 121 additions & 0 deletions

File tree

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,24 @@ public class WxPayRefundV3Request implements Serializable {
8484
*/
8585
@SerializedName(value = "notify_url")
8686
private String notifyUrl;
87+
/**
88+
* <pre>
89+
* 字段名:退款资金来源
90+
* 变量名:funds_account
91+
* 是否必填:否
92+
* 类型:string[1, 32]
93+
* 描述:
94+
* 若传递此参数则使用对应的资金账户退款,否则默认使用未结算资金退款(仅对老资金流商户适用)
95+
* 示例值:
96+
* UNSETTLED : 未结算资金
97+
* AVAILABLE : 可用余额
98+
* UNAVAILABLE : 不可用余额
99+
* OPERATION : 运营户
100+
* BASIC : 基本账户(含可用余额和不可用余额)
101+
* </pre>
102+
*/
103+
@SerializedName(value = "funds_account")
104+
private String fundsAccount;
87105
/**
88106
* <pre>
89107
* 字段名:订单金额
@@ -152,6 +170,53 @@ public static class Amount implements Serializable {
152170
*/
153171
@SerializedName(value = "currency")
154172
private String currency;
173+
/**
174+
* <pre>
175+
* 字段名:退款出资账户及金额
176+
* 变量名:from
177+
* 是否必填:否
178+
* 类型:array
179+
* 描述:
180+
* 退款出资的账户类型及金额信息
181+
* </pre>
182+
*/
183+
@SerializedName(value = "from")
184+
private List<From> from;
185+
}
186+
187+
@Data
188+
@NoArgsConstructor
189+
public static class From implements Serializable {
190+
private static final long serialVersionUID = 1L;
191+
/**
192+
* <pre>
193+
* 字段名:出资账户类型
194+
* 变量名:account
195+
* 是否必填:是
196+
* 类型:string[1, 32]
197+
* 描述:
198+
* 下面枚举值多选一。
199+
* 枚举值:
200+
* AVAILABLE : 可用余额
201+
* UNAVAILABLE : 不可用余额
202+
* 示例值:AVAILABLE
203+
* </pre>
204+
*/
205+
@SerializedName(value = "account")
206+
private String account;
207+
/**
208+
* <pre>
209+
* 字段名:出资金额
210+
* 变量名:amount
211+
* 是否必填:是
212+
* 类型:int
213+
* 描述:
214+
* 对应账户出资金额
215+
* 示例值:444
216+
* </pre>
217+
*/
218+
@SerializedName(value = "amount")
219+
private Integer amount;
155220
}
156221

157222
@Data
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.github.binarywang.wxpay.bean.request;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonArray;
5+
import com.google.gson.JsonObject;
6+
import org.testng.annotations.Test;
7+
8+
import java.util.Collections;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
12+
/**
13+
* {@link WxPayRefundV3Request} 单元测试
14+
*
15+
*/
16+
public class WxPayRefundV3RequestTest {
17+
18+
@Test
19+
public void testFundsAccountSerialization() {
20+
WxPayRefundV3Request request = new WxPayRefundV3Request();
21+
request.setOutRefundNo("1217752501201407033233368018");
22+
request.setFundsAccount("AVAILABLE");
23+
24+
Gson gson = new Gson();
25+
String json = gson.toJson(request);
26+
JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
27+
28+
assertThat(jsonObject.has("funds_account")).isTrue();
29+
assertThat(jsonObject.get("funds_account").getAsString()).isEqualTo("AVAILABLE");
30+
}
31+
32+
@Test
33+
public void testAmountFromSerialization() {
34+
WxPayRefundV3Request.From from = new WxPayRefundV3Request.From();
35+
from.setAccount("AVAILABLE");
36+
from.setAmount(444);
37+
38+
WxPayRefundV3Request.Amount amount = new WxPayRefundV3Request.Amount();
39+
amount.setRefund(888);
40+
amount.setTotal(888);
41+
amount.setCurrency("CNY");
42+
amount.setFrom(Collections.singletonList(from));
43+
44+
WxPayRefundV3Request request = new WxPayRefundV3Request();
45+
request.setAmount(amount);
46+
47+
Gson gson = new Gson();
48+
String json = gson.toJson(request);
49+
JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
50+
JsonArray fromJson = jsonObject.getAsJsonObject("amount").getAsJsonArray("from");
51+
52+
assertThat(fromJson).hasSize(1);
53+
assertThat(fromJson.get(0).getAsJsonObject().get("account").getAsString()).isEqualTo("AVAILABLE");
54+
assertThat(fromJson.get(0).getAsJsonObject().get("amount").getAsInt()).isEqualTo(444);
55+
}
56+
}

0 commit comments

Comments
 (0)