1. 支付回调接口定义

2. 定义默认的回调消息实现
This commit is contained in:
egzosn
2018-10-29 17:51:48 +08:00
parent 74a6cc7339
commit 2d792bd4be
4 changed files with 100 additions and 1 deletions

View File

@@ -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)}进行使用
* <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;
}
}

View File

@@ -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
* <pre>
* email egzosn@gmail.com
* date 2018-10-29 17:31:05
* </pre>
*/
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<String, Object> context, PayService payService) throws PayErrorException {
log.info("回调支付消息处理器,回调消息:" + JSON.toJSONString(payMessage));
return payService.successPayOutMessage(payMessage);
}
}

View File

@@ -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();
}

View File

@@ -361,6 +361,13 @@ public interface PayService<PC extends PayConfigStorage> {
*/
<T>T transferQuery(String outNo, String tradeNo, Callback<T> callback);
/**
* 将请求参数或者请求流转化为 Map
*
* @param parameterMap 请求参数
* @param is 请求流
* @return 获得回调响应信息
*/
PayOutMessage payBack(Map<String, String[]> parameterMap, InputStream is);
}