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 e9f1f3b140..e1bba3d266 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 static class Amount 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 0000000000..1d7a79f3d4 --- /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); + } +}