简化版支付回调实现,支付消息拦截器设置,支付消息处理器设置等等

This commit is contained in:
egzosn
2018-11-07 10:39:01 +08:00
parent 6c341ed2a8
commit a835a061a5
6 changed files with 150 additions and 18 deletions

View File

@@ -12,9 +12,13 @@ import com.egzosn.pay.common.http.HttpConfigStorage;
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;
@@ -37,6 +41,8 @@ import java.util.UUID;
public class AliPayController {
private PayService service = null;
@Resource
private AutowireCapableBeanFactory spring;
@PostConstruct
public void init() {
@@ -60,8 +66,10 @@ public class AliPayController {
//默认的每个路由的最大连接数
httpConfigStorage.setDefaultMaxPerRoute(10);
service = new AliPayService(aliPayConfigStorage, httpConfigStorage);
//增加支付回调消息拦截器
service.addPayMessageInterceptor(new AliPayMessageInterceptor());
//设置回调消息处理
service.setPayMessageHandler(spring.getBean(AliPayMessageHandler.class));
}
@@ -148,14 +156,18 @@ public class AliPayController {
}
/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@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());
@@ -172,6 +184,23 @@ public class AliPayController {
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();
}
/**

View File

@@ -7,6 +7,7 @@ import com.egzosn.pay.ali.api.AliPayService;
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;
@@ -291,13 +292,19 @@ public class PayController {
/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@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();
@@ -319,6 +326,32 @@ public class PayController {
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();
}
/**
* 查询
*

View File

@@ -98,8 +98,8 @@ public class PayPalPayController {
*
* @return 付款成功信息
*/
@GetMapping(value = "payBack.json")
public String executePayment(HttpServletRequest request) throws IOException {
@GetMapping(value = "payBackBefore.json")
public String payBackBefore(HttpServletRequest request) throws IOException {
try (InputStream is = request.getInputStream()) {
if (service.verify(service.getParameter2Map(request.getParameterMap(), is))) {
// TODO 这里进行成功后的订单业务处理
@@ -110,5 +110,23 @@ public class PayPalPayController {
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();
}
}

View File

@@ -167,14 +167,18 @@ public class UnionPayController {
}
/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@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());
@@ -191,6 +195,23 @@ public class UnionPayController {
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();
}
/**

View File

@@ -10,15 +10,19 @@ import com.egzosn.pay.common.http.UriVariables;
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;
@@ -41,6 +45,8 @@ public class WxPayController {
private PayService service = null;
//ssl 退款证书相关 不使用可注释
private static String KEYSTORE = "ssl 退款证书";
private static String STORE_PASSWORD = "ssl 证书对应的密码, 默认为商户号";
@@ -81,6 +87,10 @@ public class WxPayController {
//默认的每个路由的最大连接数
httpConfigStorage.setDefaultMaxPerRoute(10);
service.setRequestTemplateConfigStorage(httpConfigStorage);
//设置回调消息处理
//TODO {@link com.egzosn.pay.demo.controller.WxPayController#payBack}
// service.setPayMessageHandler(new WxPayMessageHandler(null));
}
@@ -187,14 +197,18 @@ public class WxPayController {
}
/**
* 支付回调地址
* 支付回调地址 方式一
*
* 方式二,{@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());
@@ -206,11 +220,28 @@ public class WxPayController {
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();
}
/**