Skip to content

Commit 900f068

Browse files
yantaobinarywang
authored andcommitted
🆕 【微信支付】平台收付通(退款)增加垫付退款回补和查询垫付回补结果的接口
1 parent eaf5b3a commit 900f068

7 files changed

Lines changed: 315 additions & 0 deletions

File tree

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/RefundNotifyResult.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,25 @@ public class RefundNotifyResult implements Serializable {
170170
@SerializedName(value = "amount")
171171
private Amount amount;
172172

173+
/**
174+
* <pre>
175+
* 字段名:退款出资商户
176+
* 变量名:refund_account
177+
* 是否必填:否
178+
* 类型:string(32)
179+
* 描述:
180+
* 电商平台垫资退款专用参数。需先确认已开通此功能后,才能使用。若需要开通,请联系微信支付客服。
181+
* 枚举值:
182+
* REFUND_SOURCE_PARTNER_ADVANCE : 电商平台垫付,需要向微信支付申请开通
183+
* REFUND_SOURCE_SUB_MERCHANT : 二级商户,默认值
184+
* 注意:
185+
* 若传入REFUND_SOURCE_PARTNER_ADVANCE,仅代表可以使用垫付退款,实际出款账户需以退款申请受理结果或查单结果为准。
186+
* 示例值:REFUND_SOURCE_SUB_MERCHANT
187+
* </pre>
188+
*/
189+
@SerializedName(value = "refund_account")
190+
private String refundAccount;
191+
173192
@Data
174193
@NoArgsConstructor
175194
public static class Amount implements Serializable {

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/RefundQueryResult.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,44 @@ public class RefundQueryResult implements Serializable {
183183
*/
184184
public List<PromotionDetail> promotionDetails;
185185

186+
187+
/**
188+
* <pre>
189+
* 字段名:退款出资商户
190+
* 变量名:refund_account
191+
* 是否必填:否
192+
* 类型:string(32)
193+
* 描述:
194+
* 电商平台垫资退款专用参数。需先确认已开通此功能后,才能使用。若需要开通,请联系微信支付客服。
195+
* 枚举值:
196+
* REFUND_SOURCE_PARTNER_ADVANCE : 电商平台垫付,需要向微信支付申请开通
197+
* REFUND_SOURCE_SUB_MERCHANT : 二级商户,默认值
198+
* 注意:
199+
* 若传入REFUND_SOURCE_PARTNER_ADVANCE,仅代表可以使用垫付退款,实际出款账户需以退款申请受理结果或查单结果为准。
200+
* 示例值:REFUND_SOURCE_SUB_MERCHANT
201+
* </pre>
202+
*/
203+
@SerializedName(value = "refund_account")
204+
private String refundAccount;
205+
206+
/**
207+
* <pre>
208+
* 字段名:资金账户
209+
* 变量名:funds_account
210+
* 是否必填:否
211+
* 类型:string(32)
212+
* 描述:
213+
* 若订单处于待分账状态,且未指定垫资退款(即refund_account未指定为REFUND_SOURCE_PARTNER_ADVANCE),
214+
* 可以传入此参数,指定退款资金来源账户。当该字段不存在时,默认使用订单交易资金所在账户出款,
215+
* 即待分账时使用不可用余额的资金进行退款,已分账或无分账时使用可用余额的资金进行退款。 AVAILABLE:可用余额
216+
* 示例值:AVAILABLE
217+
* </pre>
218+
*/
219+
@SerializedName(value = "funds_account")
220+
private String fundsAccount;
221+
222+
223+
186224
@Data
187225
@NoArgsConstructor
188226
public static class Amount implements Serializable {

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/RefundsRequest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,41 @@ public class RefundsRequest implements Serializable {
147147
@SerializedName(value = "notify_url")
148148
private String notifyUrl;
149149

150+
/**
151+
* <pre>
152+
* 字段名:退款出资商户
153+
* 变量名:refund_account
154+
* 是否必填:否
155+
* 类型:string(32)
156+
* 描述:
157+
* 电商平台垫资退款专用参数。需先确认已开通此功能后,才能使用。若需要开通,请联系微信支付客服。
158+
* 枚举值:
159+
* REFUND_SOURCE_PARTNER_ADVANCE : 电商平台垫付,需要向微信支付申请开通
160+
* REFUND_SOURCE_SUB_MERCHANT : 二级商户,默认值
161+
* 注意:
162+
* 若传入REFUND_SOURCE_PARTNER_ADVANCE,仅代表可以使用垫付退款,实际出款账户需以退款申请受理结果或查单结果为准。
163+
* 示例值:REFUND_SOURCE_SUB_MERCHANT
164+
* </pre>
165+
*/
166+
@SerializedName(value = "refund_account")
167+
private String refundAccount;
168+
169+
/**
170+
* <pre>
171+
* 字段名:资金账户
172+
* 变量名:funds_account
173+
* 是否必填:否
174+
* 类型:string(32)
175+
* 描述:
176+
* 若订单处于待分账状态,且未指定垫资退款(即refund_account未指定为REFUND_SOURCE_PARTNER_ADVANCE),
177+
* 可以传入此参数,指定退款资金来源账户。当该字段不存在时,默认使用订单交易资金所在账户出款,
178+
* 即待分账时使用不可用余额的资金进行退款,已分账或无分账时使用可用余额的资金进行退款。 AVAILABLE:可用余额
179+
* 示例值:AVAILABLE
180+
* </pre>
181+
*/
182+
@SerializedName(value = "funds_account")
183+
private String fundsAccount;
184+
150185
@Data
151186
@Builder
152187
@NoArgsConstructor(access = AccessLevel.PRIVATE)

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/RefundsResult.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,22 @@ public static class PromotionDetail implements Serializable {
240240

241241
}
242242

243+
244+
/**
245+
* <pre>
246+
* 字段名:退款资金来源
247+
* 变量名:refund_account
248+
* 是否必填:否
249+
* 类型:string(32)
250+
* 描述:
251+
* 枚举值:
252+
* REFUND_SOURCE_PARTNER_ADVANCE : 电商平台垫付
253+
* REFUND_SOURCE_SUB_MERCHANT : 二级商户,默认值
254+
* 示例值:REFUND_SOURCE_SUB_MERCHANT
255+
* </pre>
256+
*/
257+
@SerializedName(value = "refund_account")
258+
private String refundAccount;
259+
260+
243261
}
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
package com.github.binarywang.wxpay.bean.ecommerce;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
import java.io.Serializable;
8+
import java.util.List;
9+
10+
11+
/**
12+
* 垫付退款回补API结果
13+
* * <pre>
14+
* * 文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_4.shtml
15+
* * </pre>
16+
*
17+
* @author yantao
18+
* created on 2024/11/20
19+
*/
20+
@Data
21+
@NoArgsConstructor
22+
public class ReturnAdvanceResult implements Serializable {
23+
24+
private static final long serialVersionUID = -186851559004865784L;
25+
26+
/**
27+
* <pre>
28+
* 字段名:微信退款单号
29+
* 变量名:refund_id
30+
* 是否必填:是
31+
* 类型:string(32)
32+
* 描述:
33+
* 微信支付退款单的主键,唯一定义此资源的标识。 必须是垫付退款的微信支付退款单
34+
* 示例值:50000000382019052709732678859
35+
* </pre>
36+
*/
37+
@SerializedName(value = "refund_id")
38+
private String refundId;
39+
40+
/**
41+
* <pre>
42+
* 字段名:微信回补单号
43+
* 变量名:advance_return_id
44+
* 是否必填:是
45+
* 类型:string(32)
46+
* 描述:微信支付生成的垫付回补操作单号
47+
* 示例值:1215562501201407033233368018
48+
* </pre>
49+
*/
50+
@SerializedName(value = "advance_return_id")
51+
private String advanceReturnId ;
52+
53+
/**
54+
* <pre>
55+
* 字段名:垫付回补金额
56+
* 变量名:return_amount
57+
* 是否必填:是
58+
* 类型:int
59+
* 描述:退款单对应的垫付退款的金额
60+
* 示例值:888
61+
* </pre>
62+
*/
63+
@SerializedName(value = "return_amount")
64+
private Integer returnAmount ;
65+
66+
/**
67+
* <pre>
68+
* 字段名:出款方商户号
69+
* 变量名:payer_mchid
70+
* 是否必填:是
71+
* 类型:string(32)
72+
* 描述:微信支付分配给出款方的商户号
73+
* 示例值:1900000109
74+
* </pre>
75+
*/
76+
@SerializedName(value = "payer_mchid")
77+
private String payerMchid ;
78+
79+
/**
80+
* <pre>
81+
* 字段名:出款方账户
82+
* 变量名:payer_account
83+
* 是否必填:是
84+
* 类型:string(32)
85+
* 描述:
86+
* 枚举值:
87+
* BASIC:基本账户
88+
* OPERATION:运营账户
89+
* 示例值:BASIC
90+
* </pre>
91+
*/
92+
@SerializedName(value = "payer_account")
93+
private String payerAccount;
94+
95+
/**
96+
* <pre>
97+
* 字段名:入账方商户号
98+
* 变量名:payee_mchid
99+
* 是否必填:是
100+
* 类型:string(32)
101+
* 描述:
102+
* 微信支付分配给入账方的商户号
103+
* 示例值:1900000108
104+
* </pre>
105+
*/
106+
@SerializedName(value = "payee_mchid")
107+
private String payeeMchid;
108+
109+
/**
110+
* <pre>
111+
* 字段名:入账方账户
112+
* 变量名:payee_account
113+
* 是否必填:是
114+
* 类型:string(32)
115+
* 描述:枚举值:
116+
* BASIC:基本账户
117+
* OPERATION:运营账户
118+
* 示例值:BASIC
119+
* </pre>
120+
*/
121+
@SerializedName(value = "payee_account")
122+
private String payeeAccount;
123+
124+
/**
125+
* <pre>
126+
* 字段名:垫付回补结果
127+
* 变量名:result
128+
* 是否必填:是
129+
* 类型:string(32)
130+
* 描述:枚举值:
131+
* SUCCESS:回补成功
132+
* FAILED:回补失败,出款方账户余额不足时发生
133+
* PROCESSING:处理中
134+
* 示例值:SUCCESS
135+
* </pre>
136+
*/
137+
@SerializedName(value = "result")
138+
private String result ;
139+
140+
/**
141+
* <pre>
142+
* 字段名:垫付回补完成时间
143+
* 变量名:success_time
144+
* 是否必填:否
145+
* 类型:string(64)
146+
* 描述:垫付回补完成的时间,遵循rfc3339标准格式,
147+
* 格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,
148+
* T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,
149+
* TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。
150+
* 例如:2015-05-20T13:29:35+08:00表示北京时间2015年05月20日13点29分35秒。
151+
* 示例值:2018-06-08T10:34:56+08:00
152+
* </pre>
153+
*/
154+
@SerializedName(value = "success_time")
155+
private String successTime;
156+
157+
158+
159+
}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,33 @@ public interface EcommerceService {
364364
*/
365365
RefundQueryResult queryRefundByRefundId(String subMchid, String refundId) throws WxPayException;
366366

367+
368+
/**
369+
* <pre>
370+
* 垫付退款回补API
371+
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_4.shtml
372+
* </pre>
373+
*
374+
* @param subMchid 二级商户号
375+
* @param refundId 微信退款单号
376+
* @return 返回数据 return refunds result
377+
* @throws WxPayException the wx pay exception
378+
*/
379+
ReturnAdvanceResult refundsReturnAdvance(String subMchid, String refundId) throws WxPayException;
380+
381+
382+
/**
383+
* <pre>
384+
* 查询垫付回补结果API
385+
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_5.shtml
386+
* </pre>
387+
*
388+
* @param subMchid 二级商户号
389+
* @param refundId 微信退款单号
390+
* @return 返回数据 return refunds result
391+
* @throws WxPayException the wx pay exception
392+
*/
393+
ReturnAdvanceResult queryRefundsReturnAdvance(String subMchid, String refundId) throws WxPayException;
367394
/**
368395
* <pre>
369396
* 查询退款API

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,25 @@ public RefundQueryResult queryRefundByRefundId(String subMchid, String refundId)
290290
return GSON.fromJson(response, RefundQueryResult.class);
291291
}
292292

293+
294+
@Override
295+
public ReturnAdvanceResult refundsReturnAdvance(String subMchid, String refundId) throws WxPayException {
296+
String url = String.format("%s/v3/ecommerce/refunds/%s/return-advance", this.payService.getPayBaseUrl(), refundId);
297+
Map request = new HashMap();
298+
request.put("sub_mchid",subMchid);
299+
String response = this.payService.postV3(url, GSON.toJson(request));
300+
return GSON.fromJson(response, ReturnAdvanceResult.class);
301+
}
302+
303+
304+
@Override
305+
public ReturnAdvanceResult queryRefundsReturnAdvance(String subMchid, String refundId) throws WxPayException {
306+
String url = String.format("%s/v3/ecommerce/refunds/%s/return-advance?sub_mchid=%s", this.payService.getPayBaseUrl(), refundId,subMchid);
307+
String response = this.payService.getV3(url);
308+
return GSON.fromJson(response, ReturnAdvanceResult.class);
309+
}
310+
311+
293312
@Override
294313
public RefundQueryResult queryRefundByOutRefundNo(String subMchid, String outRefundNo) throws WxPayException {
295314
String url = String.format("%s/v3/ecommerce/refunds/out-refund-no/%s?sub_mchid=%s", this.payService.getPayBaseUrl(), outRefundNo, subMchid);

0 commit comments

Comments
 (0)