From b15edef2dd941c1b3adc2147cd36fbbed13675be Mon Sep 17 00:00:00 2001 From: egzosn Date: Wed, 7 Nov 2018 10:33:18 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89=202.=20=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84=E5=9B=9E=E8=B0=83=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=203.=20=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E5=AE=9A=E4=B9=89=E4=B8=8E=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pay-java-common/pom.xml | 2 +- .../pay/common/api/BasePayConfigStorage.java | 25 ------ .../egzosn/pay/common/api/BasePayService.java | 79 ++++++++++++++++++- .../pay/common/api/PayConfigStorage.java | 18 ----- .../pay/common/api/PayMessageInterceptor.java | 23 +++--- .../com/egzosn/pay/common/api/PayService.java | 21 +++++ 6 files changed, 109 insertions(+), 59 deletions(-) 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); + }