🎨 #1832 微信支付电商收付通增加查询提现状态的接口

This commit is contained in:
f00lish 2020-10-31 16:47:21 +08:00 committed by GitHub
parent 7eb11c8799
commit 73f30b1a82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 427 additions and 0 deletions

View File

@ -0,0 +1,195 @@
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/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_6.shtml
* </pre>
* @author: f00lish
* @date: 2020/10/27
*/
@Data
@NoArgsConstructor
public class SpWithdrawStatusResult implements Serializable {
private static final long serialVersionUID = -6013827963506201478L;
/**
* <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
* 是否必填
* 类型int
* 描述
* 单位
* 示例值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 account_type;
/**
* <pre>
* 字段名提现失败解决方案
* 变量名solution
* 是否必填
* 类型string255
* 描述
* 仅在提现失败退票关单时有值
* 示例值请修改结算银行卡信息
* </pre>
*/
@SerializedName(value = "solution")
private String solution;
}

View File

@ -0,0 +1,193 @@
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/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_3.shtml
* </pre>
* @author: f00lish
* @date: 2020/10/27
*/
@Data
@NoArgsConstructor
public class SubWithdrawStatusResult implements Serializable {
private static final long serialVersionUID = 4692602703819018325L;
/**
* <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
* 是否必填
* 类型int
* 描述
* 单位
* 示例值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;
}

View File

@ -339,6 +339,31 @@ public interface EcommerceService {
*/
SpWithdrawResult spWithdraw(SpWithdrawRequest request) throws WxPayException;
/**
* <pre>
* 二级商户查询提现状态API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_3.shtml
* </pre>
*
* @param subMchid 二级商户号
* @param outRequestNo 商户提现单号
* @return 返回数据 return sub withdraw status result
* @throws WxPayException the wx pay exception
*/
SubWithdrawStatusResult querySubWithdrawByOutRequestNo(String subMchid, String outRequestNo) throws WxPayException;
/**
* <pre>
* 电商平台查询提现状态API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/fund/chapter3_6.shtml
* </pre>
*
* @param outRequestNo 商户提现单号
* @return 返回数据 return sp withdraw status result
* @throws WxPayException the wx pay exception
*/
SpWithdrawStatusResult querySpWithdrawByOutRequestNo(String outRequestNo) throws WxPayException;
/**
* <pre>
* 修改结算帐号API

View File

@ -266,6 +266,20 @@ public class EcommerceServiceImpl implements EcommerceService {
return GSON.fromJson(response, SpWithdrawResult.class);
}
@Override
public SubWithdrawStatusResult querySubWithdrawByOutRequestNo(String subMchid, String outRequestNo) throws WxPayException {
String url = String.format("%s/v3/ecommerce/fund/withdraw/out-request-no/%s?sub_mchid=%s", this.payService.getPayBaseUrl(), outRequestNo, subMchid);
String response = this.payService.getV3(URI.create(url));
return GSON.fromJson(response, SubWithdrawStatusResult.class);
}
@Override
public SpWithdrawStatusResult querySpWithdrawByOutRequestNo(String outRequestNo) throws WxPayException {
String url = String.format("%s/v3/merchant/fund/withdraw/out-request-no/%s", this.payService.getPayBaseUrl(), outRequestNo);
String response = this.payService.getV3(URI.create(url));
return GSON.fromJson(response, SpWithdrawStatusResult.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);