mirror of
https://gitee.com/egzosn/pay-java-parent.git
synced 2026-05-08 03:56:48 +08:00
1. 支付回调接口定义
2. 定义默认的回调消息实现 3. 支付回调拦截器定义与处理
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>pay-java-parent</artifactId>
|
||||
<groupId>com.egzosn</groupId>
|
||||
<version>2.11.3</version>
|
||||
<version>2.11.4</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
@@ -270,30 +270,5 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置支付消息处理器,这里用于处理具体的支付业务
|
||||
*
|
||||
* @param handler 消息处理器
|
||||
* 配合{@link PayService#payBack(Map, InputStream)}进行使用
|
||||
* <p>
|
||||
* 默认使用{@link DefaultPayMessageHandler }进行实现
|
||||
*/
|
||||
@Override
|
||||
public void setPayMessageHandler(PayMessageHandler handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付消息处理器,这里用于处理具体的支付业务
|
||||
* 配合{@link PayService#payBack(Map, InputStream)}进行使用
|
||||
* <p>
|
||||
* 默认使用{@link DefaultPayMessageHandler }进行实现
|
||||
*/
|
||||
@Override
|
||||
public PayMessageHandler getPayMessageHandler() {
|
||||
if (null == handler){
|
||||
setPayMessageHandler(new DefaultPayMessageHandler());
|
||||
}
|
||||
return handler;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.egzosn.pay.common.api;
|
||||
|
||||
import com.egzosn.pay.common.bean.RefundOrder;
|
||||
import com.egzosn.pay.common.bean.TransactionType;
|
||||
import com.egzosn.pay.common.bean.TransferOrder;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.egzosn.pay.common.bean.*;
|
||||
import com.egzosn.pay.common.exception.PayErrorException;
|
||||
import com.egzosn.pay.common.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.common.http.HttpRequestTemplate;
|
||||
import com.egzosn.pay.common.util.sign.SignUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
@@ -22,13 +23,21 @@ import java.util.*;
|
||||
* </pre>
|
||||
*/
|
||||
public abstract class BasePayService<PC extends PayConfigStorage> implements PayService<PC> {
|
||||
|
||||
protected final Log LOG = LogFactory.getLog(getClass());
|
||||
protected PC payConfigStorage;
|
||||
|
||||
protected HttpRequestTemplate requestTemplate;
|
||||
protected int retrySleepMillis = 1000;
|
||||
|
||||
protected int maxRetryTimes = 5;
|
||||
/**
|
||||
* 支付消息处理器
|
||||
*/
|
||||
protected PayMessageHandler handler;
|
||||
/**
|
||||
* 支付消息拦截器
|
||||
*/
|
||||
protected List<PayMessageInterceptor> interceptors = new ArrayList<PayMessageInterceptor>();;
|
||||
|
||||
/**
|
||||
* 设置支付配置
|
||||
@@ -317,4 +326,66 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
|
||||
public <T>T transferQuery(String outNo, String tradeNo, Callback<T> callback){
|
||||
return callback.perform(transferQuery(outNo, tradeNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置支付消息处理器,这里用于处理具体的支付业务
|
||||
*
|
||||
* @param handler 消息处理器
|
||||
* 配合{@link PayService#payBack(Map, InputStream)}进行使用
|
||||
* <p>
|
||||
* 默认使用{@link DefaultPayMessageHandler }进行实现
|
||||
*/
|
||||
@Override
|
||||
public void setPayMessageHandler(PayMessageHandler handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付消息处理器,这里用于处理具体的支付业务
|
||||
* 配合{@link PayService#payBack(Map, InputStream)}进行使用
|
||||
* <p>
|
||||
* 默认使用{@link DefaultPayMessageHandler }进行实现
|
||||
*/
|
||||
public PayMessageHandler getPayMessageHandler() {
|
||||
if (null == handler){
|
||||
setPayMessageHandler(new DefaultPayMessageHandler());
|
||||
}
|
||||
return handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置支付消息拦截器
|
||||
*
|
||||
* @param interceptor 消息拦截器
|
||||
* 配合{@link PayService#payBack(Map, InputStream)}进行使用, 做一些预前处理
|
||||
* <p>
|
||||
*/
|
||||
@Override
|
||||
public void addPayMessageInterceptor(PayMessageInterceptor interceptor) {
|
||||
interceptors.add(interceptor);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求参数或者请求流转化为 Map
|
||||
*
|
||||
* @param parameterMap 请求参数
|
||||
* @param is 请求流
|
||||
* @return 获得回调响应信息
|
||||
*/
|
||||
@Override
|
||||
public PayOutMessage payBack(Map<String, String[]> parameterMap, InputStream is) {
|
||||
Map<String, Object> data = getParameter2Map(parameterMap, is);
|
||||
LOG.debug("回调响应:" + JSON.toJSONString(data));
|
||||
if (!verify(data)){
|
||||
return getPayOutMessage("fail", "失败");
|
||||
}
|
||||
PayMessage payMessage = new PayMessage(data);
|
||||
Map<String, Object> context = new HashMap<String, Object>();
|
||||
for (PayMessageInterceptor interceptor : interceptors){
|
||||
if (!interceptor.intercept(payMessage, context, this)){
|
||||
return successPayOutMessage(payMessage);
|
||||
}
|
||||
}
|
||||
return getPayMessageHandler().handle(payMessage, context, this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,24 +154,6 @@ import java.util.concurrent.locks.Lock;
|
||||
boolean isTest();
|
||||
|
||||
|
||||
/**
|
||||
* 设置支付消息处理器,这里用于处理具体的支付业务
|
||||
* @param handler 消息处理器
|
||||
* 配合{@link com.egzosn.pay.common.api.PayService#payBack(java.util.Map, java.io.InputStream)}进行使用
|
||||
*
|
||||
* 默认使用{@link com.egzosn.pay.common.api.DefaultPayMessageHandler }进行实现
|
||||
*
|
||||
*/
|
||||
void setPayMessageHandler(PayMessageHandler handler);
|
||||
|
||||
|
||||
/**
|
||||
* 获取支付消息处理器,这里用于处理具体的支付业务
|
||||
* 配合{@link com.egzosn.pay.common.api.PayService#payBack(java.util.Map, java.io.InputStream)}进行使用
|
||||
*
|
||||
* 默认使用{@link com.egzosn.pay.common.api.DefaultPayMessageHandler }进行实现
|
||||
*
|
||||
*/
|
||||
PayMessageHandler getPayMessageHandler();
|
||||
|
||||
}
|
||||
|
||||
@@ -7,15 +7,16 @@ import com.egzosn.pay.common.exception.PayErrorException;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 支付消息拦截器,可以用来做验证
|
||||
* 支付消息拦截器,可以用来做验证等等,使用者想怎么用就怎么用吧,你也可以选择不用
|
||||
*
|
||||
* @author egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2016-6-1 11:40:30
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2016-6-1 11:40:30
|
||||
*
|
||||
*
|
||||
* source Daniel Qian
|
||||
* </pre>
|
||||
* source Daniel Qian
|
||||
* </pre>
|
||||
*/
|
||||
public interface PayMessageInterceptor {
|
||||
|
||||
@@ -23,13 +24,13 @@ public interface PayMessageInterceptor {
|
||||
* 拦截微信消息
|
||||
*
|
||||
* @param payMessage 支付消息
|
||||
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
|
||||
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
|
||||
* @param payService 支付服务
|
||||
* @return true代表OK,false代表不OK
|
||||
*/
|
||||
boolean intercept(PayMessage payMessage,
|
||||
Map<String, Object> context,
|
||||
PayService payService
|
||||
) throws PayErrorException;
|
||||
boolean intercept(PayMessage payMessage,
|
||||
Map<String, Object> context,
|
||||
PayService payService
|
||||
) throws PayErrorException;
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.awt.image.BufferedImage;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -370,4 +371,24 @@ public interface PayService<PC extends PayConfigStorage> {
|
||||
*/
|
||||
PayOutMessage payBack(Map<String, String[]> parameterMap, InputStream is);
|
||||
|
||||
/**
|
||||
* 设置支付消息处理器,这里用于处理具体的支付业务
|
||||
* @param handler 消息处理器
|
||||
* 配合{@link com.egzosn.pay.common.api.PayService#payBack(java.util.Map, java.io.InputStream)}进行使用
|
||||
*
|
||||
* 默认使用{@link com.egzosn.pay.common.api.DefaultPayMessageHandler }进行实现
|
||||
*
|
||||
*/
|
||||
void setPayMessageHandler(PayMessageHandler handler);
|
||||
|
||||
/**
|
||||
* 设置支付消息处理器,这里用于处理具体的支付业务
|
||||
* @param interceptor 消息拦截器
|
||||
* 配合{@link com.egzosn.pay.common.api.PayService#payBack(java.util.Map, java.io.InputStream)}进行使用
|
||||
*
|
||||
* 默认使用{@link com.egzosn.pay.common.api.DefaultPayMessageHandler }进行实现
|
||||
*
|
||||
*/
|
||||
void addPayMessageInterceptor(PayMessageInterceptor interceptor);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user