Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 3 commits into from
Sep 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;


}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -115,6 +116,38 @@ public PartnerTransactionsNotifyResult parsePartnerNotifyResult(String notifyDat
}
}

@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(),
Expand Down