Skip to content

Commit 8a89e1b

Browse files
authored
Merge pull request #4 from Wechat-Group/develop
🆕 binarywang#1764 微信支付电商收付通增加请求分账回退接口
2 parents 3cd7749 + 7c10cdd commit 8a89e1b

File tree

4 files changed

+307
-0
lines changed

4 files changed

+307
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package com.github.binarywang.wxpay.bean.ecommerce;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.*;
5+
6+
import java.io.Serializable;
7+
8+
/**
9+
* 请求分账回退
10+
* * <pre>
11+
* * 文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/profitsharing/chapter3_3.shtml
12+
* * </pre>
13+
* @author: f00lish
14+
* @date: 2020/09/14
15+
*/
16+
@Data
17+
@Builder
18+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
19+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
20+
public class ReturnOrdersRequest implements Serializable {
21+
private static final long serialVersionUID = -3674823388136221959L;
22+
23+
/**
24+
* <pre>
25+
* 字段名:二级商户号
26+
* 变量名:sub_mchid
27+
* 是否必填:是
28+
* 类型:string(32)
29+
* 描述:
30+
* 分账出资的电商平台二级商户,填写微信支付分配的商户号。
31+
* 示例值:1900000109
32+
* </pre>
33+
*/
34+
@SerializedName(value = "sub_mchid")
35+
private String subMchid;
36+
37+
/**
38+
* <pre>
39+
* 字段名:微信分账单号
40+
* 变量名:order_id
41+
* 是否必填:与out_order_no二选一
42+
* 类型:string(64)
43+
* 描述:
44+
* 微信分账单号,微信系统返回的唯一标识。微信分账单号和商户分账单号二选一填写。
45+
* 示例值:3008450740201411110007820472
46+
* </pre>
47+
*/
48+
@SerializedName(value = "order_id")
49+
private String orderId;
50+
51+
/**
52+
* <pre>
53+
* 字段名:商户分账单号
54+
* 变量名:out_order_no
55+
* 是否必填:与order_id二选一
56+
* 类型:string(64)
57+
* 描述:
58+
* 商户系统内部的分账单号,在商户系统内部唯一(单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号多次请求等同一次。
59+
* 示例值:P20150806125346
60+
* </pre>
61+
*/
62+
@SerializedName(value = "out_order_no")
63+
private String outOrderNo;
64+
65+
/**
66+
* <pre>
67+
* 字段名:商户回退单号
68+
* 变量名:out_return_no
69+
* 是否必填:是
70+
* 类型:string(64)
71+
* 描述:
72+
* 此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一。
73+
* 示例值:P20150806125346
74+
* </pre>
75+
*/
76+
@SerializedName(value = "out_return_no")
77+
private String outReturnNo;
78+
79+
/**
80+
* <pre>
81+
* 字段名:回退商户号
82+
* 变量名:return_mchid
83+
* 是否必填:是
84+
* 类型:string(32)
85+
* 描述:
86+
* 只能对原分账请求中成功分给商户接收方进行回退。
87+
* 示例值:86693852
88+
* </pre>
89+
*/
90+
@SerializedName(value = "return_mchid")
91+
private String returnMchid;
92+
93+
/**
94+
* <pre>
95+
* 字段名:回退金额
96+
* 变量名:amount
97+
* 是否必填:是
98+
* 类型:int
99+
* 描述:
100+
* 需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额。
101+
* 示例值:10
102+
* </pre>
103+
*/
104+
@SerializedName(value = "amount")
105+
private Integer amount;
106+
107+
/**
108+
* <pre>
109+
* 字段名:回退描述
110+
* 变量名:description
111+
* 是否必填:是
112+
* 类型:string(80)
113+
* 描述:
114+
* 分账回退的原因描述
115+
* 示例值:分账回退
116+
* </pre>
117+
*/
118+
@SerializedName(value = "description")
119+
private String description;
120+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
package com.github.binarywang.wxpay.bean.ecommerce;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.*;
5+
6+
import java.io.Serializable;
7+
import java.util.Date;
8+
9+
10+
/**
11+
* @author: f00lish
12+
* @date: 2020/09/14
13+
*/
14+
@Data
15+
@Builder
16+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
17+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
18+
public class ReturnOrdersResult implements Serializable {
19+
private static final long serialVersionUID = 2296020044225854203L;
20+
21+
/**
22+
* <pre>
23+
* 字段名:二级商户号
24+
* 变量名:sub_mchid
25+
* 是否必填:是
26+
* 类型:string(32)
27+
* 描述:
28+
* 分账出资的电商平台二级商户,填写微信支付分配的商户号。
29+
* 示例值:1900000109
30+
* </pre>
31+
*/
32+
@SerializedName(value = "sub_mchid")
33+
private String subMchid;
34+
35+
/**
36+
* <pre>
37+
* 字段名:微信分账单号
38+
* 变量名:order_id
39+
* 是否必填:与out_order_no二选一
40+
* 类型:string(64)
41+
* 描述:
42+
* 微信分账单号,微信系统返回的唯一标识。微信分账单号和商户分账单号二选一填写。
43+
* 示例值:3008450740201411110007820472
44+
* </pre>
45+
*/
46+
@SerializedName(value = "order_id")
47+
private String orderId;
48+
49+
/**
50+
* <pre>
51+
* 字段名:商户分账单号
52+
* 变量名:out_order_no
53+
* 是否必填:与order_id二选一
54+
* 类型:string(64)
55+
* 描述:
56+
* 商户系统内部的分账单号,在商户系统内部唯一(单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号多次请求等同一次。
57+
* 示例值:P20150806125346
58+
* </pre>
59+
*/
60+
@SerializedName(value = "out_order_no")
61+
private String outOrderNo;
62+
63+
/**
64+
* <pre>
65+
* 字段名:商户回退单号
66+
* 变量名:out_return_no
67+
* 是否必填:是
68+
* 类型:string(64)
69+
* 描述:
70+
* 此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一。
71+
* 示例值:P20150806125346
72+
* </pre>
73+
*/
74+
@SerializedName(value = "out_return_no")
75+
private String R20190516001;
76+
77+
/**
78+
* <pre>
79+
* 字段名:回退商户号
80+
* 变量名:return_mchid
81+
* 是否必填:是
82+
* 类型:string(32)
83+
* 描述:
84+
* 只能对原分账请求中成功分给商户接收方进行回退。
85+
* 示例值:86693852
86+
* </pre>
87+
*/
88+
@SerializedName(value = "return_mchid")
89+
private String returnMchid;
90+
91+
/**
92+
* <pre>
93+
* 字段名:回退金额
94+
* 变量名:amount
95+
* 是否必填:是
96+
* 类型:int
97+
* 描述:
98+
* 需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额。
99+
* 示例值:10
100+
* </pre>
101+
*/
102+
@SerializedName(value = "amount")
103+
private Integer amount;
104+
105+
/**
106+
* <pre>
107+
* 字段名:微信回退单号
108+
* 变量名:return_no
109+
* 是否必填:是
110+
* 类型:string(64)
111+
* 描述:
112+
* 微信分账回退单号,微信系统返回的唯一标识。
113+
* 示例值:3008450740201411110007820472
114+
* </pre>
115+
*/
116+
@SerializedName(value = "return_no")
117+
private String returnNo;
118+
119+
/**
120+
* <pre>
121+
* 字段名:回退结果
122+
* 变量名:result
123+
* 是否必填:是
124+
* 类型:string(32)
125+
* 描述:
126+
* 如果请求返回为处理中,则商户可以通过调用回退结果查询接口获取请求的最终处理结果,枚举值:
127+
* PROCESSING:处理中
128+
* SUCCESS:已成功
129+
* FAIL:已失败
130+
* 注意:如果返回为处理中,请勿变更商户回退单号,使用相同的参数再次发起分账回退,否则会出现资金风险 在处理中状态的回退单如果5天没有成功,会因为超时被设置为已失败
131+
* 示例值:SUCCESS
132+
* </pre>
133+
*/
134+
@SerializedName(value = "result")
135+
private String result;
136+
137+
/**
138+
* <pre>
139+
* 字段名:失败原因
140+
* 变量名:fail_reason
141+
* 是否必填:否
142+
* 类型:string(32)
143+
* 描述:
144+
* 回退失败的原因,此字段仅回退结果为FAIL时存在,枚举值:
145+
* ACCOUNT_ABNORMAL:分账接收方账户异常
146+
* TIME_OUT_CLOSED::超时关单
147+
* 示例值:TIME_OUT_CLOSED
148+
* </pre>
149+
*/
150+
@SerializedName(value = "fail_reason")
151+
private String failReason;
152+
153+
/**
154+
* <pre>
155+
* 字段名:完成时间
156+
* 变量名:finish_time
157+
* 是否必填:是
158+
* 类型:string(64)
159+
* 描述:
160+
* 分账回退完成时间,遵循rfc3339标准格式
161+
* 格式为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秒。
162+
* 示例值:2015-05-20T13:29:35.120+08:00
163+
* </pre>
164+
*/
165+
@SerializedName(value = "finish_time")
166+
private Date finishTime;
167+
168+
}

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

+12
Original file line numberDiff line numberDiff line change
@@ -201,4 +201,16 @@ public interface EcommerceService {
201201
*/
202202
ProfitSharingResult profitSharing(ProfitSharingRequest request) throws WxPayException;
203203

204+
/**
205+
* <pre>
206+
* 请求分账回退API
207+
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/profitsharing/chapter3_3.shtml
208+
* </pre>
209+
*
210+
* @param request 分账回退请求
211+
* @return 返回数据 return orders result
212+
* @throws WxPayException the wx pay exception
213+
*/
214+
ReturnOrdersResult returnOrders(ReturnOrdersRequest request) throws WxPayException;
215+
204216
}

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

+7
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,13 @@ public ProfitSharingResult profitSharing(ProfitSharingRequest request) throws Wx
155155
return GSON.fromJson(response, ProfitSharingResult.class);
156156
}
157157

158+
@Override
159+
public ReturnOrdersResult returnOrders(ReturnOrdersRequest request) throws WxPayException {
160+
String url = String.format("%s/v3/ecommerce/profitsharing/returnorders", this.payService.getPayBaseUrl());
161+
String response = this.payService.postV3(url, GSON.toJson(request));
162+
return GSON.fromJson(response, ReturnOrdersResult.class);
163+
}
164+
158165
private boolean verifyNotifySign(SignatureHeader header, String data) {
159166
String beforeSign = String.format("%s\n%s\n%s\n",
160167
header.getTimeStamp(),

0 commit comments

Comments
 (0)