diff --git a/pay-java-common/pom.xml b/pay-java-common/pom.xml
index 966ea78..9ac97ed 100644
--- a/pay-java-common/pom.xml
+++ b/pay-java-common/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.11.3
+ 2.11.4
4.0.0
jar
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java
index 0941966..b5b7740 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java
@@ -270,30 +270,5 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{
}
}
- /**
- * 设置支付消息处理器,这里用于处理具体的支付业务
- *
- * @param handler 消息处理器
- * 配合{@link PayService#payBack(Map, InputStream)}进行使用
- *
- * 默认使用{@link DefaultPayMessageHandler }进行实现
- */
- @Override
- public void setPayMessageHandler(PayMessageHandler handler) {
- this.handler = handler;
- }
- /**
- * 获取支付消息处理器,这里用于处理具体的支付业务
- * 配合{@link PayService#payBack(Map, InputStream)}进行使用
- *
- * 默认使用{@link DefaultPayMessageHandler }进行实现
- */
- @Override
- public PayMessageHandler getPayMessageHandler() {
- if (null == handler){
- setPayMessageHandler(new DefaultPayMessageHandler());
- }
- return handler;
- }
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java
index 3052e07..7ad72c3 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java
@@ -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.*;
*
*/
public abstract class BasePayService implements PayService {
-
+ 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 interceptors = new ArrayList();;
/**
* 设置支付配置
@@ -317,4 +326,66 @@ public abstract class BasePayService implements Pay
public T transferQuery(String outNo, String tradeNo, Callback callback){
return callback.perform(transferQuery(outNo, tradeNo));
}
+
+ /**
+ * 设置支付消息处理器,这里用于处理具体的支付业务
+ *
+ * @param handler 消息处理器
+ * 配合{@link PayService#payBack(Map, InputStream)}进行使用
+ *
+ * 默认使用{@link DefaultPayMessageHandler }进行实现
+ */
+ @Override
+ public void setPayMessageHandler(PayMessageHandler handler) {
+ this.handler = handler;
+ }
+
+ /**
+ * 获取支付消息处理器,这里用于处理具体的支付业务
+ * 配合{@link PayService#payBack(Map, InputStream)}进行使用
+ *
+ * 默认使用{@link DefaultPayMessageHandler }进行实现
+ */
+ public PayMessageHandler getPayMessageHandler() {
+ if (null == handler){
+ setPayMessageHandler(new DefaultPayMessageHandler());
+ }
+ return handler;
+ }
+
+ /**
+ * 设置支付消息拦截器
+ *
+ * @param interceptor 消息拦截器
+ * 配合{@link PayService#payBack(Map, InputStream)}进行使用, 做一些预前处理
+ *
+ */
+ @Override
+ public void addPayMessageInterceptor(PayMessageInterceptor interceptor) {
+ interceptors.add(interceptor);
+ }
+
+ /**
+ * 将请求参数或者请求流转化为 Map
+ *
+ * @param parameterMap 请求参数
+ * @param is 请求流
+ * @return 获得回调响应信息
+ */
+ @Override
+ public PayOutMessage payBack(Map parameterMap, InputStream is) {
+ Map data = getParameter2Map(parameterMap, is);
+ LOG.debug("回调响应:" + JSON.toJSONString(data));
+ if (!verify(data)){
+ return getPayOutMessage("fail", "失败");
+ }
+ PayMessage payMessage = new PayMessage(data);
+ Map context = new HashMap();
+ for (PayMessageInterceptor interceptor : interceptors){
+ if (!interceptor.intercept(payMessage, context, this)){
+ return successPayOutMessage(payMessage);
+ }
+ }
+ return getPayMessageHandler().handle(payMessage, context, this);
+ }
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java
index 6b08f2d..30d9329 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java
@@ -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();
-
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java
index 23a55d7..bcec731 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java
@@ -7,15 +7,16 @@ import com.egzosn.pay.common.exception.PayErrorException;
import java.util.Map;
/**
- * 支付消息拦截器,可以用来做验证
+ * 支付消息拦截器,可以用来做验证等等,使用者想怎么用就怎么用吧,你也可以选择不用
+ *
* @author egan
- *
- * email egzosn@gmail.com
- * date 2016-6-1 11:40:30
+ *
+ * email egzosn@gmail.com
+ * date 2016-6-1 11:40:30
*
*
- * source Daniel Qian
- *
+ * source Daniel Qian
+ *
*/
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 context,
- PayService payService
- ) throws PayErrorException;
+ boolean intercept(PayMessage payMessage,
+ Map context,
+ PayService payService
+ ) throws PayErrorException;
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java
index 478798b..de6b5bb 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java
@@ -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 {
*/
PayOutMessage payBack(Map 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);
+
}