Skip to content

Commit

Permalink
简化版支付回调实现,支付消息拦截器设置,支付消息处理器设置等等
Browse files Browse the repository at this point in the history
  • Loading branch information
egzosn committed Nov 15, 2018
1 parent 6066a19 commit aef2296
Show file tree
Hide file tree
Showing 8 changed files with 173 additions and 32 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-java-common</artifactId>
<version>2.11.3</version>
<version>2.12.1</version>
</dependency>

```
Expand All @@ -45,7 +45,7 @@
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>{module-name}</artifactId>
<version>2.11.3</version>
<version>2.12.1</version>
</dependency>

```
Expand Down
2 changes: 1 addition & 1 deletion pay-java-demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>pay-java-parent</artifactId>
<groupId>com.egzosn</groupId>
<version>2.11.3</version>
<version>2.12.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@
import com.egzosn.pay.common.http.UriVariables;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.demo.request.QueryOrder;
import com.egzosn.pay.demo.service.handler.AliPayMessageHandler;
import com.egzosn.pay.demo.service.interceptor.AliPayMessageInterceptor;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
Expand All @@ -37,6 +41,8 @@
public class AliPayController {

private PayService service = null;
@Resource
private AutowireCapableBeanFactory spring;

@PostConstruct
public void init() {
Expand All @@ -60,8 +66,10 @@ public void init() {
//默认的每个路由的最大连接数
httpConfigStorage.setDefaultMaxPerRoute(10);
service = new AliPayService(aliPayConfigStorage, httpConfigStorage);


//增加支付回调消息拦截器
service.addPayMessageInterceptor(new AliPayMessageInterceptor());
//设置回调消息处理
service.setPayMessageHandler(spring.getBean(AliPayMessageHandler.class));
}


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

/**
* 支付回调地址
* 支付回调地址 方式一
*
* @param request
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
*
* @return
*
* @param request 请求
*
* @return 返回对应的响应码
* @see #payBack(HttpServletRequest)
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
@Deprecated
@RequestMapping(value = "payBackBefore.json")
public String payBackBefore(HttpServletRequest request) throws IOException {

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

return service.getPayOutMessage("fail", "失败").toMessage();
}
/**
* 支付回调地址
*
* @param request 请求
*
* @return 返回对应的响应码
*
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
*
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
*
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
}


/**
Expand All @@ -196,6 +226,16 @@ public Map<String, Object> query(QueryOrder order) {
public Map<String, Object> close(QueryOrder order) {
return service.close(order.getTradeNo(), order.getOutTradeNo());
}
/**
* 交易c撤销接口
*
* @param order 订单的请求体
* @return 返回支付方交易关闭后的结果
*/
@RequestMapping("cancel")
public Map<String, Object> cancel(QueryOrder order) {
return service.cancel(order.getTradeNo(), order.getOutTradeNo());
}

/**
* 申请退款接口
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.egzosn.pay.ali.bean.AliTransactionType;
import com.egzosn.pay.common.api.Callback;
import com.egzosn.pay.common.api.PayConfigStorage;
import com.egzosn.pay.common.api.PayMessageInterceptor;
import com.egzosn.pay.common.api.PayService;
import com.egzosn.pay.common.bean.*;
import com.egzosn.pay.common.http.UriVariables;
Expand Down Expand Up @@ -291,13 +292,19 @@ public Map<String, Object> getOrderInfo(Integer payId, String transactionType, B


/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@link #payBack(HttpServletRequest, Integer)} 是属于简化方式, 试用与简单的业务场景
*
*
* @param request
* @param payId
* @return 支付是否成功
*
*
*/
@RequestMapping(value = "payBack{payId}.json")
public String payBack(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
@RequestMapping(value = "payBackOne{payId}.json")
public String payBackOne(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
//根据账户id,获取对应的支付账户操作工具
PayResponse payResponse = service.getPayResponse(payId);
PayConfigStorage storage = payResponse.getStorage();
Expand All @@ -319,6 +326,32 @@ public String payBack(HttpServletRequest request, @PathVariable Integer payId) t
return payResponse.getService().getPayOutMessage("fail", "失败").toMessage();
}





/**
* 支付回调地址
* 方式二
* @param request
*
* @return
*
* 拦截器相关增加, 详情查看{@link com.egzosn.pay.common.api.PayService#addPayMessageInterceptor(PayMessageInterceptor)}
* <p></p>
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
*
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
*
*/
@RequestMapping(value = "payBack{payId}.json")
public String payBack(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
PayResponse payResponse = service.getPayResponse(payId);
return payResponse.getService().payBack(request.getParameterMap(), request.getInputStream()).toMessage();
}


/**
* 查询
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,33 @@ public Map<String, Object> refund() {
*
* @return 付款成功信息
*/
@GetMapping(value = "payBack.json")
public String executePayment(HttpServletRequest request) throws IOException {
try (InputStream is = request.getInputStream()) {
if (service.verify(service.getParameter2Map(request.getParameterMap(), is))) {
// TODO 这里进行成功后的订单业务处理
// TODO 返回成功付款页面,这个到时候再做一个漂亮的页面显示,并使用前后端分离的模式
return "success";
}
@GetMapping(value = "payBackBefore.json")
public String payBackBefore(HttpServletRequest request) throws IOException {
if (service.verify(service.getParameter2Map(request.getParameterMap(), request.getInputStream()))) {
// TODO 这里进行成功后的订单业务处理
// TODO 返回成功付款页面,这个到时候再做一个漂亮的页面显示,并使用前后端分离的模式
return "success";
}
return "failure";
}

/**
* 支付回调地址
*
* @param request
*
* @return
*
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
*
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
*
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -167,14 +167,18 @@ public Map<String, Object> microPay(BigDecimal price, String authCode) throws IO
}

/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
*
* @param request
*
* @return
* @see #payBack(HttpServletRequest)
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
@Deprecated
@RequestMapping(value = "payBackBefore.json")
public String payBackBefore(HttpServletRequest request) throws IOException {

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

return service.getPayOutMessage("fail", "失败").toMessage();
}
/**
* 支付回调地址
*
* @param request
*
* @return
*
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
*
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
*
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
}


/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,19 @@
import com.egzosn.pay.demo.entity.PayType;
import com.egzosn.pay.demo.request.QueryOrder;
import com.egzosn.pay.demo.service.PayResponse;
import com.egzosn.pay.demo.service.handler.AliPayMessageHandler;
import com.egzosn.pay.demo.service.handler.WxPayMessageHandler;
import com.egzosn.pay.wx.api.WxPayConfigStorage;
import com.egzosn.pay.wx.api.WxPayService;
import com.egzosn.pay.wx.bean.WxBank;
import com.egzosn.pay.wx.bean.WxTransactionType;
import com.egzosn.pay.wx.bean.WxTransferType;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
Expand All @@ -41,6 +45,8 @@ public class WxPayController {

private PayService service = null;



//ssl 退款证书相关 不使用可注释
private static String KEYSTORE = "ssl 退款证书";
private static String STORE_PASSWORD = "ssl 证书对应的密码, 默认为商户号";
Expand Down Expand Up @@ -81,6 +87,10 @@ public void init() {
//默认的每个路由的最大连接数
httpConfigStorage.setDefaultMaxPerRoute(10);
service.setRequestTemplateConfigStorage(httpConfigStorage);

//设置回调消息处理
//TODO {@link com.egzosn.pay.demo.controller.WxPayController#payBack}
// service.setPayMessageHandler(new WxPayMessageHandler(null));
}


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

/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
*
* @param request
*
* @return
* @see #payBack(HttpServletRequest)
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
@Deprecated
@RequestMapping(value = "payBackBefore.json")
public String payBackBefore(HttpServletRequest request) throws IOException {

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

return service.getPayOutMessage("fail", "失败").toMessage();
}
/**
* 支付回调地址
*
* @param request
*
* @return
*
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
*
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
*
*/
@RequestMapping(value = "payBack.json")
public String payBack(HttpServletRequest request) throws IOException {
//业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看com.egzosn.pay.common.api.PayService.setPayMessageHandler()
return service.payBack(request.getParameterMap(), request.getInputStream()).toMessage();
}


/**
Expand Down
Loading

0 comments on commit aef2296

Please sign in to comment.