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 80176f3..0941966 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 @@ -5,6 +5,8 @@ import com.egzosn.pay.common.bean.result.PayException; import com.egzosn.pay.common.exception.PayErrorException; import com.egzosn.pay.common.util.sign.CertDescriptor; +import java.io.InputStream; +import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -87,6 +89,11 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{ */ private boolean isCertSign = false; + /** + * 支付回调消息 + */ + protected volatile PayMessageHandler handler; + @Override public Object getAttach() { return attach; @@ -262,4 +269,31 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{ certDescriptor = new CertDescriptor(); } } + + /** + * 设置支付消息处理器,这里用于处理具体的支付业务 + * + * @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/DefaultPayMessageHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/DefaultPayMessageHandler.java new file mode 100644 index 0000000..4af551c --- /dev/null +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/DefaultPayMessageHandler.java @@ -0,0 +1,36 @@ +package com.egzosn.pay.common.api; + +import com.alibaba.fastjson.JSON; +import com.egzosn.pay.common.bean.PayMessage; +import com.egzosn.pay.common.bean.PayOutMessage; +import com.egzosn.pay.common.exception.PayErrorException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +/** + * 默认处理支付回调消息的处理器接口 + * + * 主要用来处理支付相关的业务 + * @author egan + *

+ *     email egzosn@gmail.com
+ *     date 2018-10-29 17:31:05
+ * 
+ */ +public class DefaultPayMessageHandler implements PayMessageHandler { + + protected final Log log = LogFactory.getLog(DefaultPayMessageHandler.class); + /** + * @param payMessage 支付消息 + * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 + * @param payService 支付服务 + * @return xml, text格式的消息,如果在异步规则里处理的话,可以返回null + */ + @Override + public PayOutMessage handle(PayMessage payMessage, Map context, PayService payService) throws PayErrorException { + log.info("回调支付消息处理器,回调消息:" + JSON.toJSONString(payMessage)); + return payService.successPayOutMessage(payMessage); + } +} 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 0521cdc..6b08f2d 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 @@ -152,4 +152,26 @@ import java.util.concurrent.locks.Lock; * @return true测试环境 */ 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/PayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java index e877fec..478798b 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 @@ -361,6 +361,13 @@ public interface PayService { */ T transferQuery(String outNo, String tradeNo, Callback callback); - + /** + * 将请求参数或者请求流转化为 Map + * + * @param parameterMap 请求参数 + * @param is 请求流 + * @return 获得回调响应信息 + */ + PayOutMessage payBack(Map parameterMap, InputStream is); }