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); + } +}