From 2dc2da061ed76820864541f47bc977be0cedd9e4 Mon Sep 17 00:00:00 2001 From: Yixuan Xu <109468061+mzl2233@users.noreply.github.com> Date: Wed, 20 May 2026 10:23:31 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#4001=20=E3=80=90=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E3=80=91=E4=B8=BA=E6=99=AE=E9=80=9A=E5=95=86?= =?UTF-8?q?=E6=88=B7=E7=89=88=E9=80=80=E6=AC=BE=E8=AF=B7=E6=B1=82=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E7=B1=BB=E8=A1=A5=E9=BD=90=E4=B8=8E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=95=86=E7=89=88=E4=B8=80=E8=87=B4=E7=9A=84=E2=80=9C=E9=80=80?= =?UTF-8?q?=E6=AC=BE=E8=B5=84=E9=87=91=E6=9D=A5=E6=BA=90/=E5=87=BA?= =?UTF-8?q?=E8=B5=84=E8=B4=A6=E6=88=B7=E6=98=8E=E7=BB=86=E2=80=9D=E5=8F=82?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E4=BB=A5=E6=94=AF=E6=8C=81=E5=9C=A8=20V3=20?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E7=94=B3=E8=AF=B7=E6=97=B6=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E6=9D=A5=E6=BA=90=E8=B5=84=E9=87=91=E8=B4=A6?= =?UTF-8?q?=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/request/WxPayRefundV3Request.java | 65 +++++++++++++++++++ .../request/WxPayRefundV3RequestTest.java | 56 ++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3RequestTest.java diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java index e9f1f3b14..e1bba3d26 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3Request.java @@ -84,6 +84,24 @@ public class WxPayRefundV3Request implements Serializable { */ @SerializedName(value = "notify_url") private String notifyUrl; + /** + *
+ * 字段名:退款资金来源 + * 变量名:funds_account + * 是否必填:否 + * 类型:string[1, 32] + * 描述: + * 若传递此参数则使用对应的资金账户退款,否则默认使用未结算资金退款(仅对老资金流商户适用) + * 示例值: + * UNSETTLED : 未结算资金 + * AVAILABLE : 可用余额 + * UNAVAILABLE : 不可用余额 + * OPERATION : 运营户 + * BASIC : 基本账户(含可用余额和不可用余额) + *+ */ + @SerializedName(value = "funds_account") + private String fundsAccount; /** *
* 字段名:订单金额
@@ -152,6 +170,53 @@ public class WxPayRefundV3Request implements Serializable {
*/
@SerializedName(value = "currency")
private String currency;
+ /**
+ *
+ * 字段名:退款出资账户及金额
+ * 变量名:from
+ * 是否必填:否
+ * 类型:array
+ * 描述:
+ * 退款出资的账户类型及金额信息
+ *
+ */
+ @SerializedName(value = "from")
+ private List from;
+ }
+
+ @Data
+ @NoArgsConstructor
+ public static class From implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ *
+ * 字段名:出资账户类型
+ * 变量名:account
+ * 是否必填:是
+ * 类型:string[1, 32]
+ * 描述:
+ * 下面枚举值多选一。
+ * 枚举值:
+ * AVAILABLE : 可用余额
+ * UNAVAILABLE : 不可用余额
+ * 示例值:AVAILABLE
+ *
+ */
+ @SerializedName(value = "account")
+ private String account;
+ /**
+ *
+ * 字段名:出资金额
+ * 变量名:amount
+ * 是否必填:是
+ * 类型:int
+ * 描述:
+ * 对应账户出资金额
+ * 示例值:444
+ *
+ */
+ @SerializedName(value = "amount")
+ private Integer amount;
}
@Data
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3RequestTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3RequestTest.java
new file mode 100644
index 000000000..1d7a79f3d
--- /dev/null
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/request/WxPayRefundV3RequestTest.java
@@ -0,0 +1,56 @@
+package com.github.binarywang.wxpay.bean.request;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import org.testng.annotations.Test;
+
+import java.util.Collections;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * {@link WxPayRefundV3Request} 单元测试
+ *
+ */
+public class WxPayRefundV3RequestTest {
+
+ @Test
+ public void testFundsAccountSerialization() {
+ WxPayRefundV3Request request = new WxPayRefundV3Request();
+ request.setOutRefundNo("1217752501201407033233368018");
+ request.setFundsAccount("AVAILABLE");
+
+ Gson gson = new Gson();
+ String json = gson.toJson(request);
+ JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
+
+ assertThat(jsonObject.has("funds_account")).isTrue();
+ assertThat(jsonObject.get("funds_account").getAsString()).isEqualTo("AVAILABLE");
+ }
+
+ @Test
+ public void testAmountFromSerialization() {
+ WxPayRefundV3Request.From from = new WxPayRefundV3Request.From();
+ from.setAccount("AVAILABLE");
+ from.setAmount(444);
+
+ WxPayRefundV3Request.Amount amount = new WxPayRefundV3Request.Amount();
+ amount.setRefund(888);
+ amount.setTotal(888);
+ amount.setCurrency("CNY");
+ amount.setFrom(Collections.singletonList(from));
+
+ WxPayRefundV3Request request = new WxPayRefundV3Request();
+ request.setAmount(amount);
+
+ Gson gson = new Gson();
+ String json = gson.toJson(request);
+ JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
+ JsonArray fromJson = jsonObject.getAsJsonObject("amount").getAsJsonArray("from");
+
+ assertThat(fromJson).hasSize(1);
+ assertThat(fromJson.get(0).getAsJsonObject().get("account").getAsString()).isEqualTo("AVAILABLE");
+ assertThat(fromJson.get(0).getAsJsonObject().get("amount").getAsInt()).isEqualTo(444);
+ }
+}