فهرست منبع

:new: #1758 微信支付增加电商收付通服务商和二级商户余额查询接口

f00lish 4 سال پیش
والد
کامیت
6c31059020

+ 57 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/FundBalanceResult.java

@@ -0,0 +1,57 @@
+package com.github.binarywang.wxpay.bean.ecommerce;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author: f00lish
+ * @date: 2020/09/12
+ */
+@Data
+@NoArgsConstructor
+public class FundBalanceResult {
+  /**
+   * <pre>
+   * 字段名:二级商户号
+   * 变量名:sub_mchid
+   * 是否必填:是
+   * 类型:string(32)
+   * 描述:
+   *  电商平台二级商户号,由微信支付生成并下发。
+   *  示例值:1900000109
+   * </pre>
+   */
+  @SerializedName("sub_mchid")
+  private String subMchid;
+
+  /**
+   * <pre>
+   * 字段名:可用余额
+   * 变量名:available_amount
+   * 是否必填:是
+   * 类型:int64
+   * 描述:
+   *  可用余额(单位:分),此余额可做提现操作。
+   *  示例值:100
+   * </pre>
+   */
+  @SerializedName("available_amount")
+  private Integer availableAmount;
+
+  /**
+   * <pre>
+   * 字段名:不可用余额
+   * 变量名:pending_amount
+   * 是否必填:否
+   * 类型:int64
+   * 描述:
+   *  不可用余额(单位:分)。
+   *  示例值:100
+   * </pre>
+   */
+  @SerializedName("pending_amount")
+  private Integer pendingAmount;
+
+
+}

+ 32 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/enums/SpAccountTypeEnum.java

@@ -0,0 +1,32 @@
+package com.github.binarywang.wxpay.bean.ecommerce.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 服务商账户类型
+ * @author: f00lish
+ * @date: 2020/09/12
+ */
+@Getter
+@AllArgsConstructor
+public enum SpAccountTypeEnum {
+
+  /**
+   * 基本账户
+   */
+  BASIC("BASIC"),
+  /**
+   * 运营账户
+   */
+  OPERATION("OPERATION"),
+  /**
+   * 手续费账户
+   */
+  FEES("FEES");
+
+  /**
+   * 账户类型
+   */
+  private final String value;
+}

+ 47 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EcommerceService.java

@@ -1,6 +1,7 @@
 package com.github.binarywang.wxpay.service;
 
 import com.github.binarywang.wxpay.bean.ecommerce.*;
+import com.github.binarywang.wxpay.bean.ecommerce.enums.SpAccountTypeEnum;
 import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
 import com.github.binarywang.wxpay.exception.WxPayException;
 
@@ -127,4 +128,50 @@ public interface EcommerceService {
    * @return 解密后通知数据
    */
   PartnerTransactionsNotifyResult parsePartnerNotifyResult(String notifyData, SignatureHeader header) throws WxPayException;
+
+  /**
+   * <pre>
+   * 服务商账户实时余额
+   * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/amount.shtml
+   * </pre>
+   *
+   * @param accountType 服务商账户类型
+   * @return 返回数据
+   */
+  FundBalanceResult spNowBalance(SpAccountTypeEnum accountType) throws WxPayException;
+
+  /**
+   * <pre>
+   * 服务商账户日终余额
+   * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/amount.shtml
+   * </pre>
+   *
+   * @param accountType 服务商账户类型
+   * @param date 查询日期 2020-09-11
+   * @return 返回数据
+   */
+  FundBalanceResult spDayEndBalance(SpAccountTypeEnum accountType, String date) throws WxPayException;
+
+  /**
+   * <pre>
+   * 二级商户号账户实时余额
+   * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/amount.shtml
+   * </pre>
+   *
+   * @param subMchid 二级商户号
+   * @return 返回数据
+   */
+  FundBalanceResult subNowBalance(String subMchid) throws WxPayException;
+
+  /**
+   * <pre>
+   * 二级商户号账户日终余额
+   * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/amount.shtml
+   * </pre>
+   *
+   * @param subMchid 二级商户号
+   * @param date 查询日期 2020-09-11
+   * @return 返回数据
+   */
+  FundBalanceResult subDayEndBalance(String subMchid, String date) throws WxPayException;
 }

+ 33 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EcommerceServiceImpl.java

@@ -1,6 +1,7 @@
 package com.github.binarywang.wxpay.service.impl;
 
 import com.github.binarywang.wxpay.bean.ecommerce.*;
+import com.github.binarywang.wxpay.bean.ecommerce.enums.SpAccountTypeEnum;
 import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.EcommerceService;
@@ -115,6 +116,38 @@ public class EcommerceServiceImpl implements EcommerceService {
     }
   }
 
+  @Override
+  public FundBalanceResult spNowBalance(SpAccountTypeEnum accountType) throws WxPayException {
+    String url = String.format("%s/v3/merchant/fund/balance/%s", this.payService.getPayBaseUrl(), accountType);
+    URI uri = URI.create(url);
+    String response = this.payService.getV3(uri);
+    return GSON.fromJson(response, FundBalanceResult.class);
+  }
+
+  @Override
+  public FundBalanceResult spDayEndBalance(SpAccountTypeEnum accountType, String date) throws WxPayException {
+    String url = String.format("%s/v3/merchant/fund/dayendbalance/%s?date=%s", this.payService.getPayBaseUrl(), accountType, date);
+    URI uri = URI.create(url);
+    String response = this.payService.getV3(uri);
+    return GSON.fromJson(response, FundBalanceResult.class);
+  }
+
+  @Override
+  public FundBalanceResult subNowBalance(String subMchid) throws WxPayException {
+    String url = String.format("%s/v3/ecommerce/fund/balance/%s", this.payService.getPayBaseUrl(), subMchid);
+    URI uri = URI.create(url);
+    String response = this.payService.getV3(uri);
+    return GSON.fromJson(response, FundBalanceResult.class);
+  }
+
+  @Override
+  public FundBalanceResult subDayEndBalance(String subMchid, String date) throws WxPayException {
+    String url = String.format("%s/v3/ecommerce/fund/enddaybalance/%s?date=%s", this.payService.getPayBaseUrl(), subMchid, date);
+    URI uri = URI.create(url);
+    String response = this.payService.getV3(uri);
+    return GSON.fromJson(response, FundBalanceResult.class);
+  }
+
   private boolean verifyNotifySign(SignatureHeader header, String data) {
     String beforeSign = String.format("%s\n%s\n%s\n",
       header.getTimeStamp(),