Skip to content

Commit 3f4cdb7

Browse files
committed
撤销订单API,并重构相关代码,简化开发 #101
1 parent 6945e7e commit 3f4cdb7

19 files changed

+607
-342
lines changed

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxEntPayQueryRequest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public void setPartnerTradeNo(String partnerTradeNo) {
4343
this.partnerTradeNo = partnerTradeNo;
4444
}
4545

46+
@Override
47+
protected void checkConstraints() {
48+
//do nothing
49+
}
50+
4651
@Override
4752
public String toString() {
4853
return ToStringUtils.toSimpleString(this);

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxEntPayRequest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ public class WxEntPayRequest extends WxPayBaseRequest {
154154
private String spbillCreateIp;
155155

156156

157+
@Override
158+
protected void checkConstraints() {
159+
160+
}
161+
157162
@Override
158163
public String getAppid() {
159164
return this.mchAppid;

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayBaseRequest.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package com.github.binarywang.wxpay.bean.request;
22

3+
import com.github.binarywang.wxpay.config.WxPayConfig;
4+
import com.github.binarywang.wxpay.util.SignUtils;
35
import com.thoughtworks.xstream.XStream;
46
import com.thoughtworks.xstream.annotations.XStreamAlias;
7+
import me.chanjar.weixin.common.exception.WxErrorException;
8+
import me.chanjar.weixin.common.util.BeanUtils;
59
import me.chanjar.weixin.common.util.ToStringUtils;
610
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
11+
import org.apache.commons.lang3.StringUtils;
712

813
import java.math.BigDecimal;
914

@@ -23,6 +28,22 @@
2328
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
2429
*/
2530
public abstract class WxPayBaseRequest {
31+
/**
32+
* 检查请求参数内容,包括必填参数以及特殊约束
33+
*/
34+
protected void checkFields() throws WxErrorException {
35+
//check required fields
36+
BeanUtils.checkRequiredFields(this);
37+
38+
//check other parameters
39+
this.checkConstraints();
40+
}
41+
42+
/**
43+
* 检查约束情况
44+
*/
45+
protected abstract void checkConstraints();
46+
2647
/**
2748
* <pre>
2849
* 公众账号ID
@@ -180,4 +201,41 @@ public String toXML() {
180201
xstream.processAnnotations(this.getClass());
181202
return xstream.toXML(this);
182203
}
204+
205+
/**
206+
* <pre>
207+
* 检查参数,并设置签名
208+
* 1、检查参数(注意:子类实现需要检查参数的而外功能时,请在调用父类的方法前进行相应判断)
209+
* 2、补充系统参数,如果未传入则从配置里读取
210+
* 3、生成签名,并设置进去
211+
* </pre>
212+
* @param config 支付配置对象,用于读取相应系统配置信息
213+
*/
214+
public void checkAndSign(WxPayConfig config) throws WxErrorException {
215+
this.checkFields();
216+
217+
if (StringUtils.isBlank(getAppid())) {
218+
this.setAppid(config.getAppId());
219+
}
220+
221+
if (StringUtils.isBlank(getMchId())) {
222+
this.setMchId(config.getMchId());
223+
}
224+
225+
if (StringUtils.isBlank(getSubAppId())) {
226+
this.setSubAppId(config.getSubAppId());
227+
}
228+
229+
if (StringUtils.isBlank(getSubMchId())) {
230+
this. setSubMchId(config.getSubMchId());
231+
}
232+
233+
if (StringUtils.isBlank(getNonceStr())) {
234+
this.setNonceStr(String.valueOf(System.currentTimeMillis()));
235+
}
236+
237+
//设置签名字段的值
238+
this.setSign(SignUtils.createSign(this, config.getMchKey()));
239+
}
240+
183241
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayDownloadBillRequest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
import com.thoughtworks.xstream.annotations.XStreamAlias;
44
import me.chanjar.weixin.common.annotation.Required;
5+
import org.apache.commons.lang3.ArrayUtils;
6+
import org.apache.commons.lang3.StringUtils;
7+
8+
import java.util.Arrays;
59

610
/**
711
* <pre>
@@ -12,6 +16,8 @@
1216
*/
1317
@XStreamAlias("xml")
1418
public class WxPayDownloadBillRequest extends WxPayBaseRequest {
19+
private static final String[] BILL_TYPE = new String[]{"ALL", "REFUND", "SUCCESS"};
20+
1521
/**
1622
* <pre>
1723
* 设备号
@@ -120,4 +126,16 @@ public String getTarType() {
120126
public void setTarType(String tarType) {
121127
this.tarType = tarType;
122128
}
129+
130+
@Override
131+
protected void checkConstraints() {
132+
if (StringUtils.isNotBlank(this.getTarType()) && !"GZIP".equals(this.getTarType())) {
133+
throw new IllegalArgumentException("tar_type值如果存在,只能为GZIP");
134+
}
135+
136+
if (!ArrayUtils.contains(BILL_TYPE, this.getBillType())) {
137+
throw new IllegalArgumentException(String.format("bill_tpye目前必须为%s其中之一,实际值:%s",
138+
Arrays.toString(BILL_TYPE), this.getBillType()));
139+
}
140+
}
123141
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayMicropayRequest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ public void setAuthCode(String authCode) {
261261
this.authCode = authCode;
262262
}
263263

264+
@Override
265+
protected void checkConstraints() {
266+
//do nothing
267+
}
268+
264269
public static final class Builder {
265270
private String signType;
266271
private String body;

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayOrderCloseRequest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,8 @@ public void setOutTradeNo(String outTradeNo) {
3333
this.outTradeNo = outTradeNo;
3434
}
3535

36+
@Override
37+
protected void checkConstraints() {
38+
39+
}
3640
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayOrderQueryRequest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.binarywang.wxpay.bean.request;
22

33
import com.thoughtworks.xstream.annotations.XStreamAlias;
4+
import org.apache.commons.lang3.StringUtils;
45

56
/**
67
* <pre>
@@ -61,4 +62,12 @@ public String getOutTradeNo() {
6162
public void setOutTradeNo(String outTradeNo) {
6263
this.outTradeNo = outTradeNo;
6364
}
65+
66+
@Override
67+
protected void checkConstraints() {
68+
if ((StringUtils.isBlank(transactionId) && StringUtils.isBlank(outTradeNo)) ||
69+
(StringUtils.isNotBlank(transactionId) && StringUtils.isNotBlank(outTradeNo))) {
70+
throw new IllegalArgumentException("transaction_id 和 out_trade_no 不能同时存在或同时为空,必须二选一");
71+
}
72+
}
6473
}
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
package com.github.binarywang.wxpay.bean.request;
2+
3+
import com.thoughtworks.xstream.annotations.XStreamAlias;
4+
import org.apache.commons.lang3.StringUtils;
5+
6+
/**
7+
* <pre>
8+
* 撤销订单请求类
9+
* Created by Binary Wang on 2017-3-23.
10+
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
11+
* </pre>
12+
*/
13+
@XStreamAlias("xml")
14+
public class WxPayOrderReverseRequest extends WxPayBaseRequest {
15+
16+
/**
17+
* <pre>
18+
* 微信订单号
19+
* transaction_id
20+
* String(28)
21+
* 1217752501201400000000000000
22+
* 微信的订单号,优先使用
23+
* </pre>
24+
*/
25+
@XStreamAlias("transaction_id")
26+
private String transactionId;
27+
28+
/**
29+
* <pre>
30+
* 商户订单号
31+
* out_trade_no
32+
* String(32)
33+
* 1217752501201400000000000000
34+
* 商户系统内部的订单号
35+
* transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no
36+
* </pre>
37+
*/
38+
@XStreamAlias("out_trade_no")
39+
private String outTradeNo;
40+
41+
/**
42+
* <pre>
43+
* 签名类型
44+
* sign_type
45+
* 否
46+
* String(32)
47+
* HMAC-SHA256
48+
* 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
49+
**/
50+
@XStreamAlias("sign_type")
51+
private String signType;
52+
53+
private WxPayOrderReverseRequest(Builder builder) {
54+
setTransactionId(builder.transactionId);
55+
setAppid(builder.appid);
56+
setOutTradeNo(builder.outTradeNo);
57+
setMchId(builder.mchId);
58+
setSignType(builder.signType);
59+
setSubAppId(builder.subAppId);
60+
setSubMchId(builder.subMchId);
61+
setNonceStr(builder.nonceStr);
62+
setSign(builder.sign);
63+
}
64+
65+
public static Builder newBuilder() {
66+
return new Builder();
67+
}
68+
69+
public String getTransactionId() {
70+
return this.transactionId;
71+
}
72+
73+
public void setTransactionId(String transactionId) {
74+
this.transactionId = transactionId;
75+
}
76+
77+
public String getOutTradeNo() {
78+
return this.outTradeNo;
79+
}
80+
81+
public void setOutTradeNo(String outTradeNo) {
82+
this.outTradeNo = outTradeNo;
83+
}
84+
85+
public String getSignType() {
86+
return this.signType;
87+
}
88+
89+
public void setSignType(String signType) {
90+
this.signType = signType;
91+
}
92+
93+
@Override
94+
protected void checkConstraints() {
95+
if (StringUtils.isBlank(transactionId) && StringUtils.isBlank(outTradeNo)) {
96+
throw new IllegalArgumentException("transaction_id 和 out_trade_no不能同时为空!");
97+
}
98+
}
99+
100+
public static final class Builder {
101+
private String transactionId;
102+
private String appid;
103+
private String outTradeNo;
104+
private String mchId;
105+
private String signType;
106+
private String subAppId;
107+
private String subMchId;
108+
private String nonceStr;
109+
private String sign;
110+
111+
private Builder() {
112+
}
113+
114+
public Builder transactionId(String transactionId) {
115+
this.transactionId = transactionId;
116+
return this;
117+
}
118+
119+
public Builder appid(String appid) {
120+
this.appid = appid;
121+
return this;
122+
}
123+
124+
public Builder outTradeNo(String outTradeNo) {
125+
this.outTradeNo = outTradeNo;
126+
return this;
127+
}
128+
129+
public Builder mchId(String mchId) {
130+
this.mchId = mchId;
131+
return this;
132+
}
133+
134+
public Builder signType(String signType) {
135+
this.signType = signType;
136+
return this;
137+
}
138+
139+
public Builder subAppId(String subAppId) {
140+
this.subAppId = subAppId;
141+
return this;
142+
}
143+
144+
public Builder subMchId(String subMchId) {
145+
this.subMchId = subMchId;
146+
return this;
147+
}
148+
149+
public Builder nonceStr(String nonceStr) {
150+
this.nonceStr = nonceStr;
151+
return this;
152+
}
153+
154+
public Builder sign(String sign) {
155+
this.sign = sign;
156+
return this;
157+
}
158+
159+
public WxPayOrderReverseRequest build() {
160+
return new WxPayOrderReverseRequest(this);
161+
}
162+
}
163+
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRedpackQueryRequest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,9 @@ public String getMchBillNo() {
5454
public void setMchBillNo(String mchBillNo) {
5555
this.mchBillNo = mchBillNo;
5656
}
57+
58+
@Override
59+
protected void checkConstraints() {
60+
61+
}
5762
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayRefundQueryRequest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.binarywang.wxpay.bean.request;
22

33
import com.thoughtworks.xstream.annotations.XStreamAlias;
4+
import org.apache.commons.lang3.StringUtils;
45

56
/**
67
* <pre>
@@ -132,4 +133,15 @@ public String getRefundId() {
132133
public void setRefundId(String refundId) {
133134
this.refundId = refundId;
134135
}
136+
137+
@Override
138+
protected void checkConstraints() {
139+
if ((StringUtils.isBlank(transactionId) && StringUtils.isBlank(outTradeNo)
140+
&& StringUtils.isBlank(outRefundNo) && StringUtils.isBlank(refundId)) ||
141+
(StringUtils.isNotBlank(transactionId) && StringUtils.isNotBlank(outTradeNo)
142+
&& StringUtils.isNotBlank(outRefundNo) && StringUtils.isNotBlank(refundId))) {
143+
throw new IllegalArgumentException("transaction_id,out_trade_no,out_refund_no,refund_id 必须四选一");
144+
}
145+
146+
}
135147
}

0 commit comments

Comments
 (0)