1
0
mirror of synced 2025-11-06 04:20:53 +08:00

🆕 #3494 【微信支付】平台收付通提现接口新增回调参数支持及补充日终余额提现API

This commit is contained in:
Copilot
2025-11-05 10:45:50 +08:00
committed by GitHub
parent bb573afcaf
commit d4186c49c1
8 changed files with 877 additions and 4 deletions

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
/**
* 电商平台提现
* <pre>
* 文档地址https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_5.shtml
* 文档地址https://pay.weixin.qq.com/doc/v3/partner/4012476670
* </pre>
*/
@Data
@@ -88,4 +88,19 @@ public class SpWithdrawRequest implements Serializable {
@SerializedName(value = "account_type")
private String accountType;
/**
* <pre>
* 字段名:回调通知地址
* 变量名notify_url
* 是否必填:否
* 类型string256
* 描述:
* 异步接收提现状态变更通知的回调地址通知url必须为外网可访问的url不能携带参数。
* 如果参数中传了notify_url则商户平台上配置的回调地址将不会生效优先回调当前传的地址。
* 示例值https://www.weixin.qq.com/wxpay/pay.php
* </pre>
*/
@SerializedName(value = "notify_url")
private String notifyUrl;
}

View File

@@ -0,0 +1,125 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 二级商户按日终余额预约提现
* <pre>
* 文档地址https://pay.weixin.qq.com/doc/v3/partner/4013328143
* </pre>
*
* @author copilot
* created on 2024/12/24
*/
@Data
@NoArgsConstructor
public class SubDayEndBalanceWithdrawRequest implements Serializable {
private static final long serialVersionUID = -8745123456789012345L;
/**
* <pre>
* 字段名:二级商户号
* 变量名sub_mchid
* 是否必填:是
* 类型string32
* 描述:
* 电商平台二级商户号,由微信支付生成并下发。
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名:商户提现单号
* 变量名out_request_no
* 是否必填:是
* 类型string32
* 描述:
* 必须是字母数字
* 示例值20190611222222222200000000012122
* </pre>
*/
@SerializedName(value = "out_request_no")
private String outRequestNo;
/**
* <pre>
* 字段名:提现金额
* 变量名amount
* 是否必填:是
* 类型int64
* 描述:
* 提现金额(单位:分)
* 示例值100
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名:备注
* 变量名remark
* 是否必填:否
* 类型string56
* 描述:
* 商户对提现单的备注
* 示例值:交易提现
* </pre>
*/
@SerializedName(value = "remark")
private String remark;
/**
* <pre>
* 字段名:银行附言
* 变量名bank_memo
* 是否必填:否
* 类型string32
* 描述:
* 展示在收款银行系统中的附言数字、字母最长32个汉字能否成功展示依赖银行系统支持
* 示例值:微信支付提现
* </pre>
*/
@SerializedName(value = "bank_memo")
private String bankMemo;
/**
* <pre>
* 字段名:出款账户类型
* 变量名account_type
* 是否必填:是
* 类型string16
* 描述:
* 枚举值:
* BASIC基本户
* OPERATION运营账户
* FEES手续费账户
* 示例值BASIC
* </pre>
*/
@SerializedName(value = "account_type")
private String accountType;
/**
* <pre>
* 字段名:回调通知地址
* 变量名notify_url
* 是否必填:否
* 类型string256
* 描述:
* 异步接收提现状态变更通知的回调地址通知url必须为外网可访问的url不能携带参数。
* 如果参数中传了notify_url则商户平台上配置的回调地址将不会生效优先回调当前传的地址。
* 示例值https://www.weixin.qq.com/wxpay/pay.php
* </pre>
*/
@SerializedName(value = "notify_url")
private String notifyUrl;
}

View File

@@ -0,0 +1,99 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 二级商户按日终余额预约提现结果
* <pre>
* 文档地址https://pay.weixin.qq.com/doc/v3/partner/4013328143
* </pre>
*
* @author copilot
* created on 2024/12/24
*/
@Data
@NoArgsConstructor
public class SubDayEndBalanceWithdrawResult implements Serializable {
private static final long serialVersionUID = -8745123456789012346L;
/**
* <pre>
* 字段名:二级商户号
* 变量名sub_mchid
* 是否必填:是
* 类型string32
* 描述:
* 电商平台二级商户号,由微信支付生成并下发。
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名:电商平台商户号
* 变量名sp_mchid
* 是否必填:是
* 类型string32
* 描述:
* 电商平台商户号
* 示例值1800000123
* </pre>
*/
@SerializedName(value = "sp_mchid")
private String spMchid;
/**
* <pre>
* 字段名:商户提现单号
* 变量名out_request_no
* 是否必填:是
* 类型string32
* 描述:
* 商户提现单号,由商户自定义生成。
* 示例值20190611222222222200000000012122
* </pre>
*/
@SerializedName(value = "out_request_no")
private String outRequestNo;
/**
* <pre>
* 字段名:微信支付提现单号
* 变量名withdraw_id
* 是否必填:是
* 类型string128
* 描述:
* 电商平台提交二级商户提现申请后,由微信支付返回的申请单号,作为查询申请状态的唯一标识。
* 示例值12321937198237912739132791732912793127931279317929791239112123
* </pre>
*/
@SerializedName(value = "withdraw_id")
private String withdrawId;
/**
* <pre>
* 字段名:提现单状态
* 变量名status
* 是否必填:是
* 类型string16
* 描述:
* 枚举值:
* CREATE_SUCCESS受理成功
* SUCCESS提现成功
* FAIL提现失败
* REFUND提现退票
* CLOSE关单
* INIT业务单已创建
* 示例值CREATE_SUCCESS
* </pre>
*/
@SerializedName(value = "status")
private String status;
}

View File

@@ -0,0 +1,261 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 查询二级商户按日终余额预约提现状态
* <pre>
* 文档地址https://pay.weixin.qq.com/doc/v3/partner/4013328163
* </pre>
*
* @author copilot
* created on 2024/12/24
*/
@Data
@NoArgsConstructor
public class SubDayEndBalanceWithdrawStatusResult implements Serializable {
private static final long serialVersionUID = -8745123456789012347L;
/**
* <pre>
* 字段名:二级商户号
* 变量名sub_mchid
* 是否必填:是
* 类型string32
* 描述:
* 电商平台二级商户号,由微信支付生成并下发。
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名:电商平台商户号
* 变量名sp_mchid
* 是否必填:是
* 类型string32
* 描述:
* 电商平台商户号
* 示例值1800000123
* </pre>
*/
@SerializedName(value = "sp_mchid")
private String spMchid;
/**
* <pre>
* 字段名:提现单状态
* 变量名status
* 是否必填:是
* 类型string16
* 描述:
* 枚举值:
* CREATE_SUCCESS受理成功
* SUCCESS提现成功
* FAIL提现失败
* REFUND提现退票
* CLOSE关单
* INIT业务单已创建
* 示例值CREATE_SUCCESS
* </pre>
*/
@SerializedName(value = "status")
private String status;
/**
* <pre>
* 字段名:微信支付提现单号
* 变量名withdraw_id
* 是否必填:是
* 类型string128
* 描述:
* 电商平台提交二级商户提现申请后,由微信支付返回的申请单号,作为查询申请状态的唯一标识。
* 示例值12321937198237912739132791732912793127931279317929791239112123
* </pre>
*/
@SerializedName(value = "withdraw_id")
private String withdrawId;
/**
* <pre>
* 字段名:商户提现单号
* 变量名out_request_no
* 是否必填:是
* 类型string32
* 描述:
* 商户提现单号,由商户自定义生成。
* 示例值20190611222222222200000000012122
* </pre>
*/
@SerializedName(value = "out_request_no")
private String outRequestNo;
/**
* <pre>
* 字段名:提现金额
* 变量名amount
* 是否必填:是
* 类型int64
* 描述:
* 单位:分
* 示例值1
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名:发起提现时间
* 变量名create_time
* 是否必填:是
* 类型string29
* 描述:
* 遵循rfc3339标准格式格式为YYYY-MM-DDTHH:mm:ss:sss+TIMEZONE
* YYYY-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss:sss表示时分秒毫秒
* TIMEZONE表示时区+08:00表示东八区时间领先UTC 8小时即北京时间
* 例如2015-05-20T13:29:35+08:00表示北京时间2015年5月20日13点29分35秒。
* 示例值2015-05-20T13:29:35.120+08:00
* </pre>
*/
@SerializedName(value = "create_time")
private String createTime;
/**
* <pre>
* 字段名:提现状态更新时间
* 变量名update_time
* 是否必填:是
* 类型string29
* 描述:
* 遵循rfc3339标准格式格式为YYYY-MM-DDTHH:mm:ss:sss+TIMEZONE
* YYYY-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss:sss表示时分秒毫秒
* TIMEZONE表示时区+08:00表示东八区时间领先UTC 8小时即北京时间
* 例如2015-05-20T13:29:35+08:00表示北京时间2015年5月20日13点29分35秒。
* 示例值2015-05-20T13:29:35.120+08:00
* </pre>
*/
@SerializedName(value = "update_time")
private String updateTime;
/**
* <pre>
* 字段名:失败原因
* 变量名reason
* 是否必填:否
* 类型string255
* 描述:
* 仅在提现失败、退票、关单时有值
* 示例值:卡号错误
* </pre>
*/
@SerializedName(value = "reason")
private String reason;
/**
* <pre>
* 字段名:提现备注
* 变量名remark
* 是否必填:否
* 类型string56
* 描述:
* 商户对提现单的备注,若发起提现时未传入相应值或输入不合法,则该值为空
* 示例值:交易提现
* </pre>
*/
@SerializedName(value = "remark")
private String remark;
/**
* <pre>
* 字段名:银行附言
* 变量名bank_memo
* 是否必填:否
* 类型string32
* 描述:
* 展示在收款银行系统中的附言,由数字、字母、汉字组成(能否成功展示依赖银行系统支持)。若发起提现时未传入相应值或输入不合法,则该值为空
* 示例值:微信提现
* </pre>
*/
@SerializedName(value = "bank_memo")
private String bankMemo;
/**
* <pre>
* 字段名:出款账户类型
* 变量名account_type
* 是否必填:是
* 类型string16
* 描述:
* BASIC基本户
* OPERATION运营账户
* FEES手续费账户
* 示例值BASIC
* </pre>
*/
@SerializedName(value = "account_type")
private String accountType;
/**
* <pre>
* 字段名:提现失败解决方案
* 变量名solution
* 是否必填:否
* 类型string255
* 描述:
* 仅在提现失败、退票、关单时有值
* 示例值:请修改结算银行卡信息
* </pre>
*/
@SerializedName(value = "solution")
private String solution;
/**
* <pre>
* 字段名:出款户名
* 变量名account_name
* 是否必填:否
* 类型string256
* 描述:
* 出款户名(加密)
* 示例值2mPt3pWzZ+O3dSGbGnCrR3bqMZ5pwfpQy1NNrA==
* </pre>
*/
@SerializedName(value = "account_name")
private String accountName;
/**
* <pre>
* 字段名:出款账号
* 变量名account_number
* 是否必填:否
* 类型string256
* 描述:
* 出款账号(加密)
* 示例值2mPt3pWzZ+O3dSGbGnCrR3bqMZ5pwfpQy1NNrA==
* </pre>
*/
@SerializedName(value = "account_number")
private String accountNumber;
/**
* <pre>
* 字段名:出款银行全称(含支行)
* 变量名bank_name
* 是否必填:否
* 类型string256
* 描述:
* 出款银行全称(含支行)(加密)
* 示例值2mPt3pWzZ+O3dSGbGnCrR3bqMZ5pwfpQy1NNrA==
* </pre>
*/
@SerializedName(value = "bank_name")
private String bankName;
}

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
/**
* 二级商户账户余额提现
* <pre>
* 文档地址https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/combine/chapter3_3.shtml
* 文档地址https://pay.weixin.qq.com/doc/v3/partner/4012476652
* </pre>
*/
@Data
@@ -86,4 +86,19 @@ public class SubWithdrawRequest implements Serializable {
@SerializedName(value = "bank_memo")
private String bankMemo;
/**
* <pre>
* 字段名:回调通知地址
* 变量名notify_url
* 是否必填:否
* 类型string256
* 描述:
* 异步接收提现状态变更通知的回调地址通知url必须为外网可访问的url不能携带参数。
* 如果参数中传了notify_url则商户平台上配置的回调地址将不会生效优先回调当前传的地址。
* 示例值https://www.weixin.qq.com/wxpay/pay.php
* </pre>
*/
@SerializedName(value = "notify_url")
private String notifyUrl;
}

View File

@@ -0,0 +1,266 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 提现状态变更通知结果
* <pre>
* 文档地址https://pay.weixin.qq.com/doc/v3/partner/4013049135
* </pre>
*
* @author copilot
* created on 2024/12/24
*/
@Data
@NoArgsConstructor
public class WithdrawNotifyResult implements Serializable {
private static final long serialVersionUID = -7451351849088368701L;
/**
* 源数据
*/
private NotifyResponse rawData;
/**
* <pre>
* 字段名:电商平台商户号
* 变量名sp_mchid
* 是否必填:是
* 类型string32
* 描述:
* 微信支付分配给电商平台的商户号
* 示例值1900000100
* </pre>
*/
@SerializedName(value = "sp_mchid")
private String spMchid;
/**
* <pre>
* 字段名:二级商户号
* 变量名sub_mchid
* 是否必填:否
* 类型string32
* 描述:
* 微信支付分配给二级商户的商户号,仅二级商户提现时返回
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名:商户提现单号
* 变量名out_request_no
* 是否必填:是
* 类型string32
* 描述:
* 商户提现单号,由商户自定义生成
* 示例值20190611222222222200000000012122
* </pre>
*/
@SerializedName(value = "out_request_no")
private String outRequestNo;
/**
* <pre>
* 字段名:微信支付提现单号
* 变量名withdraw_id
* 是否必填:是
* 类型string32
* 描述:
* 微信支付提现单号
* 示例值12321002198704230011101200
* </pre>
*/
@SerializedName(value = "withdraw_id")
private String withdrawId;
/**
* <pre>
* 字段名:提现状态
* 变量名status
* 是否必填:是
* 类型string16
* 描述:
* 提现状态:
* CREATE_SUCCESS受理成功
* SUCCESS提现成功
* FAILED提现失败
* REFUND提现退票
* CLOSE关单
* 示例值SUCCESS
* </pre>
*/
@SerializedName(value = "status")
private String status;
/**
* <pre>
* 字段名:提现金额
* 变量名amount
* 是否必填:是
* 类型int64
* 描述:
* 提现金额,单位:分(人民币)
* 示例值100
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名:提现发起时间
* 变量名create_time
* 是否必填:是
* 类型string29
* 描述:
* 提现发起时间遵循rfc3339标准格式格式为YYYY-MM-DDTHH:mm:ss:sss+TIMEZONE
* YYYY-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss:sss表示时分秒毫秒
* TIMEZONE表示时区+08:00表示东八区时间领先UTC 8小时即北京时间
* 例如2015-05-20T13:29:35.120+08:00表示北京时间2015年5月20日13点29分35秒
* 示例值2018-06-08T10:34:56+08:00
* </pre>
*/
@SerializedName(value = "create_time")
private String createTime;
/**
* <pre>
* 字段名:提现更新时间
* 变量名update_time
* 是否必填:是
* 类型string29
* 描述:
* 提现更新时间遵循rfc3339标准格式格式为YYYY-MM-DDTHH:mm:ss:sss+TIMEZONE
* YYYY-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss:sss表示时分秒毫秒
* TIMEZONE表示时区+08:00表示东八区时间领先UTC 8小时即北京时间
* 例如2015-05-20T13:29:35.120+08:00表示北京时间2015年5月20日13点29分35秒
* 示例值2018-06-08T10:34:56+08:00
* </pre>
*/
@SerializedName(value = "update_time")
private String updateTime;
/**
* <pre>
* 字段名:失败原因
* 变量名reason
* 是否必填:否
* 类型string256
* 描述:
* 提现失败原因,仅在提现失败、退票时有值
* 示例值:账户余额不足
* </pre>
*/
@SerializedName(value = "reason")
private String reason;
/**
* <pre>
* 字段名:备注
* 变量名remark
* 是否必填:否
* 类型string256
* 描述:
* 商户对提现单的备注,若提现申请时未传递,则无此字段
* 示例值:交易提现
* </pre>
*/
@SerializedName(value = "remark")
private String remark;
/**
* <pre>
* 字段名:银行附言
* 变量名bank_memo
* 是否必填:否
* 类型string256
* 描述:
* 展示在收款银行系统中的附言,若提现申请时未传递,则无此字段
* 示例值:微信支付提现
* </pre>
*/
@SerializedName(value = "bank_memo")
private String bankMemo;
/**
* <pre>
* 字段名:账户类型
* 变量名account_type
* 是否必填:否
* 类型string16
* 描述:
* 提现账户类型,仅电商平台提现时返回:
* BASIC基本账户
* OPERATION运营账户
* FEES手续费账户
* 示例值BASIC
* </pre>
*/
@SerializedName(value = "account_type")
private String accountType;
/**
* <pre>
* 字段名:提现失败解决方案
* 变量名solution
* 是否必填:否
* 类型string255
* 描述:
* 仅在提现失败、退票、关单时有值
* 示例值:请修改结算银行卡信息
* </pre>
*/
@SerializedName(value = "solution")
private String solution;
/**
* <pre>
* 字段名:出款户名
* 变量名account_name
* 是否必填:否
* 类型string256
* 描述:
* 出款户名(加密)
* 示例值2mPt3pWzZ+O3dSGbGnCrR3bqMZ5pwfpQy1NNrA==
* </pre>
*/
@SerializedName(value = "account_name")
private String accountName;
/**
* <pre>
* 字段名:出款账号
* 变量名account_number
* 是否必填:否
* 类型string256
* 描述:
* 出款账号(加密)
* 示例值2mPt3pWzZ+O3dSGbGnCrR3bqMZ5pwfpQy1NNrA==
* </pre>
*/
@SerializedName(value = "account_number")
private String accountNumber;
/**
* <pre>
* 字段名:出款银行全称(含支行)
* 变量名bank_name
* 是否必填:否
* 类型string256
* 描述:
* 出款银行全称(含支行)(加密)
* 示例值2mPt3pWzZ+O3dSGbGnCrR3bqMZ5pwfpQy1NNrA==
* </pre>
*/
@SerializedName(value = "bank_name")
private String bankName;
}

View File

@@ -417,10 +417,23 @@ public interface EcommerceService {
*/
RefundNotifyResult parseRefundNotifyResult(String notifyData, SignatureHeader header) throws WxPayException;
/**
* <pre>
* 提现状态变更通知回调数据处理
* 文档地址: https://pay.weixin.qq.com/doc/v3/partner/4013049135
* </pre>
*
* @param notifyData 通知数据
* @param header 通知头部数据,不传则表示不校验头
* @return 解密后通知数据 withdraw notify result
* @throws WxPayException the wx pay exception
*/
WithdrawNotifyResult parseWithdrawNotifyResult(String notifyData, SignatureHeader header) throws WxPayException;
/**
* <pre>
* 二级商户账户余额提现API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_2.shtml
* 文档地址: https://pay.weixin.qq.com/doc/v3/partner/4012476652
* </pre>
*
* @param request 提现请求
@@ -432,7 +445,7 @@ public interface EcommerceService {
/**
* <pre>
* 电商平台提现API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_5.shtml
* 文档地址: https://pay.weixin.qq.com/doc/v3/partner/4012476670
* </pre>
*
* @param request 提现请求
@@ -466,6 +479,43 @@ public interface EcommerceService {
*/
SpWithdrawStatusResult querySpWithdrawByOutRequestNo(String outRequestNo) throws WxPayException;
/**
* <pre>
* 平台查询预约提现状态(根据微信支付预约提现单号查询)
* 文档地址: https://pay.weixin.qq.com/doc/v3/partner/4012476674
* </pre>
*
* @param withdrawId 微信支付提现单号
* @return 返回数据 return sp withdraw status result
* @throws WxPayException the wx pay exception
*/
SpWithdrawStatusResult querySpWithdrawByWithdrawId(String withdrawId) throws WxPayException;
/**
* <pre>
* 二级商户按日终余额预约提现
* 文档地址: https://pay.weixin.qq.com/doc/v3/partner/4013328143
* </pre>
*
* @param request 提现请求
* @return 返回数据 return day-end balance withdraw result
* @throws WxPayException the wx pay exception
*/
SubDayEndBalanceWithdrawResult subDayEndBalanceWithdraw(SubDayEndBalanceWithdrawRequest request) throws WxPayException;
/**
* <pre>
* 查询二级商户按日终余额预约提现状态
* 文档地址: https://pay.weixin.qq.com/doc/v3/partner/4013328163
* </pre>
*
* @param subMchid 二级商户号
* @param outRequestNo 商户提现单号
* @return 返回数据 return day-end balance withdraw status result
* @throws WxPayException the wx pay exception
*/
SubDayEndBalanceWithdrawStatusResult querySubDayEndBalanceWithdraw(String subMchid, String outRequestNo) throws WxPayException;
/**
* <pre>
* 修改结算账号API

View File

@@ -337,6 +337,27 @@ public class EcommerceServiceImpl implements EcommerceService {
}
}
@Override
public WithdrawNotifyResult parseWithdrawNotifyResult(String notifyData, SignatureHeader header) throws WxPayException {
if (Objects.nonNull(header) && !this.verifyNotifySign(header, notifyData)) {
throw new WxPayException("非法请求,头部信息验证失败");
}
NotifyResponse response = GSON.fromJson(notifyData, NotifyResponse.class);
NotifyResponse.Resource resource = response.getResource();
String cipherText = resource.getCiphertext();
String associatedData = resource.getAssociatedData();
String nonce = resource.getNonce();
String apiV3Key = this.payService.getConfig().getApiV3Key();
try {
String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key);
WithdrawNotifyResult notifyResult = GSON.fromJson(result, WithdrawNotifyResult.class);
notifyResult.setRawData(response);
return notifyResult;
} catch (GeneralSecurityException | IOException e) {
throw new WxPayException("解析报文异常!", e);
}
}
@Override
public SubWithdrawResult subWithdraw(SubWithdrawRequest request) throws WxPayException {
String url = String.format("%s/v3/ecommerce/fund/withdraw", this.payService.getPayBaseUrl());
@@ -365,6 +386,27 @@ public class EcommerceServiceImpl implements EcommerceService {
return GSON.fromJson(response, SpWithdrawStatusResult.class);
}
@Override
public SpWithdrawStatusResult querySpWithdrawByWithdrawId(String withdrawId) throws WxPayException {
String url = String.format("%s/v3/merchant/fund/withdraw/withdraw-id/%s", this.payService.getPayBaseUrl(), withdrawId);
String response = this.payService.getV3(url);
return GSON.fromJson(response, SpWithdrawStatusResult.class);
}
@Override
public SubDayEndBalanceWithdrawResult subDayEndBalanceWithdraw(SubDayEndBalanceWithdrawRequest request) throws WxPayException {
String url = String.format("%s/v3/ecommerce/fund/balance-withdraw", this.payService.getPayBaseUrl());
String response = this.payService.postV3(url, GSON.toJson(request));
return GSON.fromJson(response, SubDayEndBalanceWithdrawResult.class);
}
@Override
public SubDayEndBalanceWithdrawStatusResult querySubDayEndBalanceWithdraw(String subMchid, String outRequestNo) throws WxPayException {
String url = String.format("%s/v3/ecommerce/fund/balance-withdraw/out-request-no/%s?sub_mchid=%s", this.payService.getPayBaseUrl(), outRequestNo, subMchid);
String response = this.payService.getV3(url);
return GSON.fromJson(response, SubDayEndBalanceWithdrawStatusResult.class);
}
@Override
public void modifySettlement(String subMchid, SettlementRequest request) throws WxPayException {
String url = String.format("%s/v3/apply4sub/sub_merchants/%s/modify-settlement", this.payService.getPayBaseUrl(), subMchid);