Skip to content

Commit aef2296

Browse files
committed
简化版支付回调实现,支付消息拦截器设置,支付消息处理器设置等等
1 parent 6066a19 commit aef2296

File tree

8 files changed

+173
-32
lines changed

8 files changed

+173
-32
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<dependency>
3434
<groupId>com.egzosn</groupId>
3535
<artifactId>pay-java-common</artifactId>
36-
<version>2.11.3</version>
36+
<version>2.12.1</version>
3737
</dependency>
3838

3939
```
@@ -45,7 +45,7 @@
4545
<dependency>
4646
<groupId>com.egzosn</groupId>
4747
<artifactId>{module-name}</artifactId>
48-
<version>2.11.3</version>
48+
<version>2.12.1</version>
4949
</dependency>
5050

5151
```

pay-java-demo/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>pay-java-parent</artifactId>
77
<groupId>com.egzosn</groupId>
8-
<version>2.11.3</version>
8+
<version>2.12.1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111
<packaging>war</packaging>

pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/AliPayController.java

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@
1212
import com.egzosn.pay.common.http.UriVariables;
1313
import com.egzosn.pay.common.util.sign.SignUtils;
1414
import com.egzosn.pay.demo.request.QueryOrder;
15+
import com.egzosn.pay.demo.service.handler.AliPayMessageHandler;
16+
import com.egzosn.pay.demo.service.interceptor.AliPayMessageInterceptor;
17+
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
1518
import org.springframework.web.bind.annotation.RequestMapping;
1619
import org.springframework.web.bind.annotation.RestController;
1720
import javax.annotation.PostConstruct;
21+
import javax.annotation.Resource;
1822
import javax.imageio.ImageIO;
1923
import javax.servlet.http.HttpServletRequest;
2024
import java.io.ByteArrayOutputStream;
@@ -37,6 +41,8 @@
3741
public class AliPayController {
3842

3943
private PayService service = null;
44+
@Resource
45+
private AutowireCapableBeanFactory spring;
4046

4147
@PostConstruct
4248
public void init() {
@@ -60,8 +66,10 @@ public void init() {
6066
//默认的每个路由的最大连接数
6167
httpConfigStorage.setDefaultMaxPerRoute(10);
6268
service = new AliPayService(aliPayConfigStorage, httpConfigStorage);
63-
64-
69+
//增加支付回调消息拦截器
70+
service.addPayMessageInterceptor(new AliPayMessageInterceptor());
71+
//设置回调消息处理
72+
service.setPayMessageHandler(spring.getBean(AliPayMessageHandler.class));
6573
}
6674

6775

@@ -148,14 +156,19 @@ public Map<String, Object> microPay(BigDecimal price, String authCode) throws IO
148156
}
149157

150158
/**
151-
* 支付回调地址
159+
* 支付回调地址 方式一
152160
*
153-
* @param request
161+
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
154162
*
155-
* @return
163+
*
164+
* @param request 请求
165+
*
166+
* @return 返回对应的响应码
167+
* @see #payBack(HttpServletRequest)
156168
*/
157-
@RequestMapping(value = "payBack.json")
158-
public String payBack(HttpServletRequest request) throws IOException {
169+
@Deprecated
170+
@RequestMapping(value = "payBackBefore.json")
171+
public String payBackBefore(HttpServletRequest request) throws IOException {
159172

160173
//获取支付方返回的对应参数
161174
Map<String, Object> params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
@@ -172,6 +185,23 @@ public String payBack(HttpServletRequest request) throws IOException {
172185

173186
return service.getPayOutMessage("fail", "失败").toMessage();
174187
}
188+
/**
189+
* 支付回调地址
190+
*
191+
* @param request 请求
192+
*
193+
* @return 返回对应的响应码
194+
*
195+
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
196+
*
197+
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
198+
*
199+
*/
200+
@RequestMapping(value = "payBack.json")
201+
public String payBack(HttpServletRequest request) throws IOException {
202+
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
203+
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
204+
}
175205

176206

177207
/**
@@ -196,6 +226,16 @@ public Map<String, Object> query(QueryOrder order) {
196226
public Map<String, Object> close(QueryOrder order) {
197227
return service.close(order.getTradeNo(), order.getOutTradeNo());
198228
}
229+
/**
230+
* 交易c撤销接口
231+
*
232+
* @param order 订单的请求体
233+
* @return 返回支付方交易关闭后的结果
234+
*/
235+
@RequestMapping("cancel")
236+
public Map<String, Object> cancel(QueryOrder order) {
237+
return service.cancel(order.getTradeNo(), order.getOutTradeNo());
238+
}
199239

200240
/**
201241
* 申请退款接口

pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.egzosn.pay.ali.bean.AliTransactionType;
88
import com.egzosn.pay.common.api.Callback;
99
import com.egzosn.pay.common.api.PayConfigStorage;
10+
import com.egzosn.pay.common.api.PayMessageInterceptor;
1011
import com.egzosn.pay.common.api.PayService;
1112
import com.egzosn.pay.common.bean.*;
1213
import com.egzosn.pay.common.http.UriVariables;
@@ -291,13 +292,19 @@ public Map<String, Object> getOrderInfo(Integer payId, String transactionType, B
291292

292293

293294
/**
294-
* 支付回调地址
295+
* 支付回调地址 方式一
296+
*
297+
* 方式二,{@link #payBack(HttpServletRequest, Integer)} 是属于简化方式, 试用与简单的业务场景
298+
*
295299
*
296300
* @param request
301+
* @param payId
297302
* @return 支付是否成功
303+
*
304+
*
298305
*/
299-
@RequestMapping(value = "payBack{payId}.json")
300-
public String payBack(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
306+
@RequestMapping(value = "payBackOne{payId}.json")
307+
public String payBackOne(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
301308
//根据账户id,获取对应的支付账户操作工具
302309
PayResponse payResponse = service.getPayResponse(payId);
303310
PayConfigStorage storage = payResponse.getStorage();
@@ -319,6 +326,32 @@ public String payBack(HttpServletRequest request, @PathVariable Integer payId) t
319326
return payResponse.getService().getPayOutMessage("fail", "失败").toMessage();
320327
}
321328

329+
330+
331+
332+
333+
/**
334+
* 支付回调地址
335+
* 方式二
336+
* @param request
337+
*
338+
* @return
339+
*
340+
* 拦截器相关增加, 详情查看{@link com.egzosn.pay.common.api.PayService#addPayMessageInterceptor(PayMessageInterceptor)}
341+
* <p></p>
342+
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
343+
*
344+
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
345+
*
346+
*/
347+
@RequestMapping(value = "payBack{payId}.json")
348+
public String payBack(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
349+
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
350+
PayResponse payResponse = service.getPayResponse(payId);
351+
return payResponse.getService().payBack(request.getParameterMap(), request.getInputStream()).toMessage();
352+
}
353+
354+
322355
/**
323356
* 查询
324357
*

pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayPalPayController.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,33 @@ public Map<String, Object> refund() {
9898
*
9999
* @return 付款成功信息
100100
*/
101-
@GetMapping(value = "payBack.json")
102-
public String executePayment(HttpServletRequest request) throws IOException {
103-
try (InputStream is = request.getInputStream()) {
104-
if (service.verify(service.getParameter2Map(request.getParameterMap(), is))) {
105-
// TODO 这里进行成功后的订单业务处理
106-
// TODO 返回成功付款页面,这个到时候再做一个漂亮的页面显示,并使用前后端分离的模式
107-
return "success";
108-
}
101+
@GetMapping(value = "payBackBefore.json")
102+
public String payBackBefore(HttpServletRequest request) throws IOException {
103+
if (service.verify(service.getParameter2Map(request.getParameterMap(), request.getInputStream()))) {
104+
// TODO 这里进行成功后的订单业务处理
105+
// TODO 返回成功付款页面,这个到时候再做一个漂亮的页面显示,并使用前后端分离的模式
106+
return "success";
109107
}
110108
return "failure";
111109
}
112110

111+
/**
112+
* 支付回调地址
113+
*
114+
* @param request
115+
*
116+
* @return
117+
*
118+
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
119+
*
120+
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
121+
*
122+
*/
123+
@RequestMapping(value = "payBack.json")
124+
public String payBack(HttpServletRequest request) throws IOException {
125+
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
126+
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
127+
}
128+
113129

114130
}

pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/UnionPayController.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,18 @@ public Map<String, Object> microPay(BigDecimal price, String authCode) throws IO
167167
}
168168

169169
/**
170-
* 支付回调地址
170+
* 支付回调地址 方式一
171+
*
172+
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
171173
*
172174
* @param request
173175
*
174176
* @return
177+
* @see #payBack(HttpServletRequest)
175178
*/
176-
@RequestMapping(value = "payBack.json")
177-
public String payBack(HttpServletRequest request) throws IOException {
179+
@Deprecated
180+
@RequestMapping(value = "payBackBefore.json")
181+
public String payBackBefore(HttpServletRequest request) throws IOException {
178182

179183
//获取支付方返回的对应参数
180184
Map<String, Object> params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
@@ -191,6 +195,23 @@ public String payBack(HttpServletRequest request) throws IOException {
191195

192196
return service.getPayOutMessage("fail", "失败").toMessage();
193197
}
198+
/**
199+
* 支付回调地址
200+
*
201+
* @param request
202+
*
203+
* @return
204+
*
205+
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
206+
*
207+
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
208+
*
209+
*/
210+
@RequestMapping(value = "payBack.json")
211+
public String payBack(HttpServletRequest request) throws IOException {
212+
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
213+
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
214+
}
194215

195216

196217
/**

pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/WxPayController.java

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@
1010
import com.egzosn.pay.demo.entity.PayType;
1111
import com.egzosn.pay.demo.request.QueryOrder;
1212
import com.egzosn.pay.demo.service.PayResponse;
13+
import com.egzosn.pay.demo.service.handler.AliPayMessageHandler;
14+
import com.egzosn.pay.demo.service.handler.WxPayMessageHandler;
1315
import com.egzosn.pay.wx.api.WxPayConfigStorage;
1416
import com.egzosn.pay.wx.api.WxPayService;
1517
import com.egzosn.pay.wx.bean.WxBank;
1618
import com.egzosn.pay.wx.bean.WxTransactionType;
1719
import com.egzosn.pay.wx.bean.WxTransferType;
20+
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
1821
import org.springframework.web.bind.annotation.RequestMapping;
1922
import org.springframework.web.bind.annotation.RestController;
2023

2124
import javax.annotation.PostConstruct;
25+
import javax.annotation.Resource;
2226
import javax.imageio.ImageIO;
2327
import javax.servlet.http.HttpServletRequest;
2428
import java.io.ByteArrayOutputStream;
@@ -41,6 +45,8 @@ public class WxPayController {
4145

4246
private PayService service = null;
4347

48+
49+
4450
//ssl 退款证书相关 不使用可注释
4551
private static String KEYSTORE = "ssl 退款证书";
4652
private static String STORE_PASSWORD = "ssl 证书对应的密码, 默认为商户号";
@@ -81,6 +87,10 @@ public void init() {
8187
//默认的每个路由的最大连接数
8288
httpConfigStorage.setDefaultMaxPerRoute(10);
8389
service.setRequestTemplateConfigStorage(httpConfigStorage);
90+
91+
//设置回调消息处理
92+
//TODO {@link com.egzosn.pay.demo.controller.WxPayController#payBack}
93+
// service.setPayMessageHandler(new WxPayMessageHandler(null));
8494
}
8595

8696

@@ -187,14 +197,18 @@ public Map<String, Object> microPay( BigDecimal price, String authCode) throws I
187197
}
188198

189199
/**
190-
* 支付回调地址
200+
* 支付回调地址 方式一
201+
*
202+
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
191203
*
192204
* @param request
193205
*
194206
* @return
207+
* @see #payBack(HttpServletRequest)
195208
*/
196-
@RequestMapping(value = "payBack.json")
197-
public String payBack(HttpServletRequest request) throws IOException {
209+
@Deprecated
210+
@RequestMapping(value = "payBackBefore.json")
211+
public String payBackBefore(HttpServletRequest request) throws IOException {
198212

199213
//获取支付方返回的对应参数
200214
Map<String, Object> params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
@@ -206,11 +220,28 @@ public String payBack(HttpServletRequest request) throws IOException {
206220
if (service.verify(params)) {
207221
//这里处理业务逻辑
208222
//......业务逻辑处理块........
209-
return service.getPayOutMessage("success", "成功").toMessage();
223+
return service.getPayOutMessage("Success", "成功").toMessage();
210224
}
211225

212226
return service.getPayOutMessage("fail", "失败").toMessage();
213227
}
228+
/**
229+
* 支付回调地址
230+
*
231+
* @param request
232+
*
233+
* @return
234+
*
235+
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
236+
*
237+
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
238+
*
239+
*/
240+
@RequestMapping(value = "payBack.json")
241+
public String payBack(HttpServletRequest request) throws IOException {
242+
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
243+
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
244+
}
214245

215246

216247
/**

0 commit comments

Comments
 (0)