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 a8894eb..ed8e109 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
@@ -17,13 +17,14 @@ import java.util.*;
/**
* 支付基础服务
+ *
* @author: egan
- *
+ *
* email egzosn@gmail.com
* date 2017/3/5 20:36
*
*/
-public abstract class BasePayService implements PayService {
+public abstract class BasePayService implements PayService {
protected final Log LOG = LogFactory.getLog(getClass());
protected PC payConfigStorage;
@@ -38,10 +39,12 @@ public abstract class BasePayService implements Pay
/**
* 支付消息拦截器
*/
- protected List interceptors = new ArrayList();;
+ protected List interceptors = new ArrayList();
+ ;
/**
* 设置支付配置
+ *
* @param payConfigStorage 支付配置
*/
@Override
@@ -54,6 +57,7 @@ public abstract class BasePayService implements Pay
public PC getPayConfigStorage() {
return payConfigStorage;
}
+
@Override
public HttpRequestTemplate getHttpRequestTemplate() {
return requestTemplate;
@@ -61,6 +65,7 @@ public abstract class BasePayService implements Pay
/**
* 设置并创建请求模版, 代理请求配置这里是否合理??,
+ *
* @param configStorage http请求配置
* @return 支付服务
*/
@@ -82,17 +87,18 @@ public abstract class BasePayService implements Pay
/**
- * Generate a Base64 encoded String from user , password
- * @param user 用户名
+ * Generate a Base64 encoded String from user , password
+ *
+ * @param user 用户名
* @param password 密码
* @return authorizationString
*/
protected String authorizationString(String user, String password) {
String base64ClientID = null;
try {
- base64ClientID = com.egzosn.pay.common.util.sign.encrypt.Base64.encode(String.format("%s:%s", user , password).getBytes("UTF-8"));
+ base64ClientID = com.egzosn.pay.common.util.sign.encrypt.Base64.encode(String.format("%s:%s", user, password).getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
- LOG.error(e);
+ LOG.error(e);
}
return base64ClientID;
@@ -108,8 +114,9 @@ public abstract class BasePayService implements Pay
@Override
public String createSign(String content, String characterEncoding) {
- return SignUtils.valueOf(payConfigStorage.getSignType()).createSign(content, payConfigStorage.getKeyPrivate(),characterEncoding);
+ return SignUtils.valueOf(payConfigStorage.getSignType()).createSign(content, payConfigStorage.getKeyPrivate(), characterEncoding);
}
+
/**
* 创建签名
*
@@ -119,7 +126,7 @@ public abstract class BasePayService implements Pay
*/
@Override
public String createSign(Map content, String characterEncoding) {
- return SignUtils.valueOf(payConfigStorage.getSignType()).sign(content, payConfigStorage.getKeyPrivate(),characterEncoding);
+ return SignUtils.valueOf(payConfigStorage.getSignType()).sign(content, payConfigStorage.getKeyPrivate(), characterEncoding);
}
/**
@@ -142,20 +149,20 @@ public abstract class BasePayService implements Pay
* @return 获得回调的请求参数
*/
@Override
- public Map getParameter2Map (Map parameterMap, InputStream is) {
+ public Map getParameter2Map(Map parameterMap, InputStream is) {
- Map params = new TreeMap();
- for (Map.Entry entry : parameterMap.entrySet()) {
+ Map params = new TreeMap();
+ for (Map.Entry entry : parameterMap.entrySet()) {
String name = entry.getKey();
String[] values = entry.getValue();
String valueStr = "";
- for (int i = 0,len = values.length; i < len; i++) {
- valueStr += (i == len - 1) ? values[i] : values[i] + ",";
+ for (int i = 0, len = values.length; i < len; i++) {
+ valueStr += (i == len - 1) ? values[i] : values[i] + ",";
}
- if (StringUtils.isNotEmpty(payConfigStorage.getInputCharset()) && !valueStr.matches("\\w+")){
+ if (StringUtils.isNotEmpty(payConfigStorage.getInputCharset()) && !valueStr.matches("\\w+")) {
try {
- if(valueStr.equals(new String(valueStr.getBytes("iso8859-1"), "iso8859-1"))){
- valueStr=new String(valueStr.getBytes("iso8859-1"), payConfigStorage.getInputCharset());
+ if (valueStr.equals(new String(valueStr.getBytes("iso8859-1"), "iso8859-1"))) {
+ valueStr = new String(valueStr.getBytes("iso8859-1"), payConfigStorage.getInputCharset());
}
} catch (UnsupportedEncodingException e) {
LOG.error(e);
@@ -169,11 +176,12 @@ public abstract class BasePayService implements Pay
/**
* 交易查询接口,带处理器
+ *
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
- * @return 返回查询回来的结果集
+ * @param callback 处理器
+ * @param 返回类型
+ * @return 返回查询回来的结果集
*/
@Override
public T query(String tradeNo, String outTradeNo, Callback callback) {
@@ -186,26 +194,27 @@ public abstract class BasePayService implements Pay
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方交易关闭后的结果
*/
@Override
public T close(String tradeNo, String outTradeNo, Callback callback) {
- return callback.perform(close(tradeNo, outTradeNo));
+ return callback.perform(close(tradeNo, outTradeNo));
}
+
/**
* 交易撤销
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方交易撤销后的结果
*/
@Override
public T cancel(String tradeNo, String outTradeNo, Callback callback) {
- return callback.perform(close(tradeNo, outTradeNo));
+ return callback.perform(close(tradeNo, outTradeNo));
}
/**
@@ -229,7 +238,6 @@ public abstract class BasePayService implements Pay
* @param totalAmount 总金额
* @param callback 处理器
* @param 返回类型
- *
* @return 处理过后的类型对象, 返回支付方申请退款后的结果
* @see #refund(RefundOrder, Callback)
*/
@@ -243,16 +251,15 @@ public abstract class BasePayService implements Pay
/**
* 申请退款接口
*
- * @param refundOrder 退款订单信息
- * @return 返回支付方申请退款后的结果
- * @param callback 处理器
- * @param 返回类型
+ * @param refundOrder 退款订单信息
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方申请退款后的结果
*/
@Override
public T refund(RefundOrder refundOrder, Callback callback) {
- return callback.perform(refund(refundOrder));
+ return callback.perform(refund(refundOrder));
}
@@ -263,7 +270,6 @@ public abstract class BasePayService implements Pay
* @param outTradeNo 商户单号
* @param callback 处理器
* @param 返回类型
- *
* @return 处理过后的类型对象,返回支付方查询退款后的结果
*/
@Override
@@ -274,13 +280,13 @@ public abstract class BasePayService implements Pay
/**
* 查询退款
*
- * @param refundOrder 退款订单信息
- * @param callback 处理器
- * @param 返回类型
+ * @param refundOrder 退款订单信息
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方查询退款后的结果
*/
@Override
- public T refundquery(RefundOrder refundOrder, Callback callback){
+ public T refundquery(RefundOrder refundOrder, Callback callback) {
return callback.perform(refundquery(refundOrder));
}
@@ -291,7 +297,6 @@ public abstract class BasePayService implements Pay
* @param billType 账单类型,具体请查看对应支付平台
* @param callback 处理器
* @param 返回类型
- *
* @return 返回支付方下载对账单的结果
*/
@Override
@@ -300,15 +305,15 @@ public abstract class BasePayService implements Pay
}
/**
- * @param tradeNoOrBillDate 支付平台订单号或者账单类型, 具体请 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
- * @param outTradeNoBillType 商户单号或者 账单类型
- * @param transactionType 交易类型
- * @param callback 处理器
- * @param 返回类型
+ * @param tradeNoOrBillDate 支付平台订单号或者账单类型, 具体请 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
+ * @param outTradeNoBillType 商户单号或者 账单类型
+ * @param transactionType 交易类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方对应接口的结果
*/
@Override
- public T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback){
+ public T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback) {
return callback.perform(secondaryInterface(tradeNoOrBillDate, outTradeNoBillType, transactionType));
}
@@ -317,7 +322,6 @@ public abstract class BasePayService implements Pay
*
* @param order 转账订单
* @param callback 处理器
- *
* @return 对应的转账结果
*/
@Override
@@ -330,7 +334,6 @@ public abstract class BasePayService implements Pay
* 转账
*
* @param order 转账订单
- *
* @return 对应的转账结果
*/
@Override
@@ -341,27 +344,26 @@ public abstract class BasePayService implements Pay
/**
* 转账查询
*
- * @param outNo 商户转账订单号
+ * @param outNo 商户转账订单号
* @param tradeNo 支付平台转账订单号
- *
* @return 对应的转账订单
*/
@Override
- public Map transferQuery(String outNo, String tradeNo){
+ public Map transferQuery(String outNo, String tradeNo) {
return new HashMap<>(0);
}
/**
* 转账查询
*
- * @param outNo 商户转账订单号
- * @param tradeNo 支付平台转账订单号
+ * @param outNo 商户转账订单号
+ * @param tradeNo 支付平台转账订单号
* @param callback 处理器
- * @param 返回类型
+ * @param 返回类型
* @return 对应的转账订单
*/
@Override
- public T transferQuery(String outNo, String tradeNo, Callback callback){
+ public T transferQuery(String outNo, String tradeNo, Callback callback) {
return callback.perform(transferQuery(outNo, tradeNo));
}
@@ -382,11 +384,11 @@ public abstract class BasePayService implements Pay
* 获取支付消息处理器,这里用于处理具体的支付业务
* 配合{@link PayService#payBack(Map, InputStream)}进行使用
*
- * @return 默认使用{@link DefaultPayMessageHandler }进行实现
*
+ * @return 默认使用{@link DefaultPayMessageHandler }进行实现
*/
public PayMessageHandler getPayMessageHandler() {
- if (null == handler){
+ if (null == handler) {
setPayMessageHandler(new DefaultPayMessageHandler());
}
return handler;
@@ -416,16 +418,27 @@ public abstract class BasePayService implements Pay
if (LOG.isDebugEnabled()) {
LOG.debug("回调响应:" + JSON.toJSONString(data));
}
- if (!verify(data)){
+ if (!verify(data)) {
return getPayOutMessage("fail", "失败");
}
- PayMessage payMessage = new PayMessage(data);
+ PayMessage payMessage = this.createMessage(data);
Map context = new HashMap();
- for (PayMessageInterceptor interceptor : interceptors){
- if (!interceptor.intercept(payMessage, context, this)){
+ for (PayMessageInterceptor interceptor : interceptors) {
+ if (!interceptor.intercept(payMessage, context, this)) {
return successPayOutMessage(payMessage);
}
}
return getPayMessageHandler().handle(payMessage, context, this);
}
+
+ /**
+ * 创建消息
+ *
+ * @param message 支付平台返回的消息
+ * @return 支付消息对象
+ */
+ @Override
+ public PayMessage createMessage(Map message) {
+ return new PayMessage(message);
+ }
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java
index 5485d84..53485a7 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java
@@ -19,7 +19,7 @@ import java.util.Map;
* source Daniel Qian
*
*/
-public interface PayMessageHandler {
+public interface PayMessageHandler {
/**
* 处理支付回调消息的处理器接口
@@ -29,9 +29,9 @@ public interface PayMessageHandler {
* @return xml,text格式的消息,如果在异步规则里处理的话,可以返回null
* @throws PayErrorException 支付错误异常
*/
- PayOutMessage handle(PayMessage payMessage,
+ PayOutMessage handle(M payMessage,
Map context,
- PayService payService
+ S payService
) throws PayErrorException;
}
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 bcec731..69b7f4d 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
@@ -18,7 +18,7 @@ import java.util.Map;
* source Daniel Qian
*
*/
-public interface PayMessageInterceptor {
+public interface PayMessageInterceptor {
/**
* 拦截微信消息
@@ -28,9 +28,9 @@ public interface PayMessageInterceptor {
* @param payService 支付服务
* @return true代表OK,false代表不OK
*/
- boolean intercept(PayMessage payMessage,
+ boolean intercept(M payMessage,
Map context,
- PayService payService
+ S payService
) throws PayErrorException;
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java
index 4675b71..3a54246 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java
@@ -2,13 +2,13 @@ package com.egzosn.pay.common.api;
import com.egzosn.pay.common.bean.PayMessage;
import com.egzosn.pay.common.bean.PayOutMessage;
-
import com.egzosn.pay.common.util.LogExceptionHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -17,7 +17,7 @@ import java.util.concurrent.Future;
/**
*
* 支付消息路由器,通过代码化的配置,把来自支付的消息交给handler处理
- *
+ *
* 说明:
* 1. 配置路由规则时要按照从细到粗的原则,否则可能消息可能会被提前处理
* 2. 默认情况下消息只会被处理一次,除非使用 {@link PayMessageRouterRule#next()}
@@ -39,147 +39,167 @@ import java.util.concurrent.Future;
* router.route(message);
* source chanjarster/weixin-java-tools Daniel Qian
*
- * @author egan
*
+ * @author egan
*/
public class PayMessageRouter {
- protected final Log LOG = LogFactory.getLog(PayMessageRouter.class);
- /**
- * 异步线程大小
- */
- private static final int DEFAULT_THREAD_POOL_SIZE = 100;
- /**
- * 规则集
- */
- private final List rules = new ArrayList();
- /**
- * 支付服务
- */
- private final PayService payService;
- /**
- * 异步线程处理器
- */
- private ExecutorService executorService;
- /**
- * 支付异常处理器
- */
- private PayErrorExceptionHandler exceptionHandler;
+ protected final Log LOG = LogFactory.getLog(PayMessageRouter.class);
+ /**
+ * 异步线程大小
+ */
+ private static final int DEFAULT_THREAD_POOL_SIZE = 100;
+ /**
+ * 规则集
+ */
+ private final List rules = new ArrayList();
+ /**
+ * 支付服务
+ */
+ private final PayService payService;
+ /**
+ * 异步线程处理器
+ */
+ private ExecutorService executorService;
+ /**
+ * 支付异常处理器
+ */
+ private PayErrorExceptionHandler exceptionHandler;
- /**
- * 根据支付服务创建路由
- * @param payService 支付服务
- */
- public PayMessageRouter(PayService payService) {
- this.payService = payService;
- this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE);
- this.exceptionHandler = new LogExceptionHandler();
- }
+ /**
+ * 根据支付服务创建路由
+ *
+ * @param payService 支付服务
+ */
+ public PayMessageRouter(PayService payService) {
+ this.payService = payService;
+ this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE);
+ this.exceptionHandler = new LogExceptionHandler();
+ }
- /**
- *
- * 设置自定义的 {@link ExecutorService}
- * 如果不调用用该方法,默认使 Executors.newFixedThreadPool(100)
- *
- * @param executorService 异步线程处理器
- */
- public void setExecutorService(ExecutorService executorService) {
- this.executorService = executorService;
- }
+ /**
+ *
+ * 设置自定义的 {@link ExecutorService}
+ * 如果不调用用该方法,默认使 Executors.newFixedThreadPool(100)
+ *
+ *
+ * @param executorService 异步线程处理器
+ */
+ public void setExecutorService(ExecutorService executorService) {
+ this.executorService = executorService;
+ }
+ /**
+ *
+ * 设置自定义的{@link PayErrorExceptionHandler}
+ * 如果不调用该方法,默认使用 {@link LogExceptionHandler}
+ *
+ *
+ * @param exceptionHandler 异常处理器
+ */
+ public void setExceptionHandler(PayErrorExceptionHandler exceptionHandler) {
+ this.exceptionHandler = exceptionHandler;
+ }
- /**
- *
- * 设置自定义的{@link PayErrorExceptionHandler}
- * 如果不调用该方法,默认使用 {@link LogExceptionHandler}
- *
- * @param exceptionHandler 异常处理器
- */
- public void setExceptionHandler(PayErrorExceptionHandler exceptionHandler) {
- this.exceptionHandler = exceptionHandler;
- }
+ /**
+ * 获取所有的规则
+ *
+ * @return 规则
+ */
+ List getRules() {
+ return this.rules;
+ }
- /**
- * 获取所有的规则
- * @return 规则
- */
- List getRules() {
- return this.rules;
- }
+ /**
+ * 开始一个新的Route规则
+ *
+ * @return 新的Route规则
+ */
+ public PayMessageRouterRule rule() {
+ return new PayMessageRouterRule(this);
+ }
- /**
- * 开始一个新的Route规则
- * @return 新的Route规则
- */
- public PayMessageRouterRule rule() {
- return new PayMessageRouterRule(this);
- }
-
- /**
- * 处理支付消息
- * @param payMessage 支付消息
- * @return 支付输出结果
- */
- public PayOutMessage route(final PayMessage payMessage) {
-
- final List matchRules = new ArrayList();
- // 收集匹配的规则
- for (final PayMessageRouterRule rule : rules) {
- if (rule.test(payMessage)) {
- matchRules.add(rule);
- if(!rule.isReEnter()) {
- break;
+ /**
+ * 处理支付消息
+ *
+ * @param payMessage 支付消息
+ * @return 支付输出结果
+ */
+ public PayOutMessage route(Map payMessage, PayConfigStorage storage) {
+ PayMessage message = payService.createMessage(payMessage);
+ message.setPayType(storage.getPayType());
+ if (null == storage.getMsgType()){
+ message.setMsgType(storage.getMsgType().name());
}
- }
+ return route(message);
}
- if (matchRules.isEmpty()) {
- return null;
- }
+ /**
+ * 处理支付消息
+ *
+ * @param payMessage 支付消息
+ * @return 支付输出结果
+ */
+ public PayOutMessage route(final PayMessage payMessage) {
- PayOutMessage res = null;
- final List futures = new ArrayList();
- for (final PayMessageRouterRule rule : matchRules) {
- // 返回最后一个非异步的rule的执行结果
- if(rule.isAsync()) {
- futures.add(
- executorService.submit(new Runnable() {
- @Override
- public void run() {
- rule.service(payMessage, payService, exceptionHandler);
- }
- })
- );
- } else {
- res = rule.service(payMessage, payService, exceptionHandler);
- // 在同步操作结束,session访问结束
- if (LOG.isDebugEnabled()) {
- LOG.debug("End session access: async=false, fromPay=" + payMessage.getFromPay());
- }
- }
- }
-
- if (futures.size() > 0) {
- executorService.submit(new Runnable() {
- @Override
- public void run() {
- for (Future future : futures) {
- try {
- future.get();
- LOG.debug("End session access: async=true, fromPay=" + payMessage.getFromPay());
-
- } catch (InterruptedException e) {
- LOG.error("Error happened when wait task finish", e);
- } catch (ExecutionException e) {
- LOG.error("Error happened when wait task finish", e);
+ final List matchRules = new ArrayList();
+ // 收集匹配的规则
+ for (final PayMessageRouterRule rule : rules) {
+ if (rule.test(payMessage)) {
+ matchRules.add(rule);
+ if (!rule.isReEnter()) {
+ break;
+ }
}
- }
}
- });
+
+ if (matchRules.isEmpty()) {
+ return null;
+ }
+
+ PayOutMessage res = null;
+ final List futures = new ArrayList();
+ for (final PayMessageRouterRule rule : matchRules) {
+ // 返回最后一个非异步的rule的执行结果
+ if (rule.isAsync()) {
+ futures.add(
+ executorService.submit(new Runnable() {
+ @Override
+ public void run() {
+ rule.service(payMessage, payService, exceptionHandler);
+ }
+ })
+ );
+ } else {
+ res = rule.service(payMessage, payService, exceptionHandler);
+ // 在同步操作结束,session访问结束
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("End session access: async=false, fromPay=" + payMessage.getFromPay());
+ }
+ }
+ }
+
+ if (futures.size() > 0) {
+ executorService.submit(new Runnable() {
+ @Override
+ public void run() {
+ for (Future future : futures) {
+ try {
+ future.get();
+ LOG.debug("End session access: async=true, fromPay=" + payMessage.getFromPay());
+
+ } catch (InterruptedException e) {
+ LOG.error("Error happened when wait task finish", e);
+ } catch (ExecutionException e) {
+ LOG.error("Error happened when wait task finish", e);
+ }
+ }
+ }
+ });
+ }
+ return res;
}
- return res;
- }
}
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 c0eb4ef..0c7f73d 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
@@ -15,17 +15,17 @@ import java.util.Map;
* 支付服务
*
* @author egan
- *
- * email egzosn@gmail.com
- * date 2016-5-18 14:09:01
- *
+ *
+ * email egzosn@gmail.com
+ * date 2016-5-18 14:09:01
+ *
*/
public interface PayService {
-
/**
* 设置支付配置
+ *
* @param payConfigStorage 支付配置
* @return 支付服务
*/
@@ -37,6 +37,7 @@ public interface PayService {
* @return 支付配置
*/
PC getPayConfigStorage();
+
/**
* 获取http请求工具
*
@@ -46,8 +47,9 @@ public interface PayService {
/**
* 设置 请求工具配置 设置并创建请求模版, 代理请求配置这里是否合理??,
+ *
* @param configStorage http请求配置
- * @return 支付服务
+ * @return 支付服务
*/
PayService setRequestTemplateConfigStorage(HttpConfigStorage configStorage);
@@ -72,6 +74,7 @@ public interface PayService {
/**
* 支付宝需要,微信是否也需要再次校验来源,进行订单查询
* 校验数据来源
+ *
* @param id 业务id, 数据的真实性.
* @return true通过
*/
@@ -85,14 +88,16 @@ public interface PayService {
* @return 订单信息
* @see PayOrder 支付订单信息
*/
- Map orderInfo(PayOrder order);
+ Map orderInfo(PayOrder order);
/**
* 页面转跳支付, 返回对应页面重定向信息
+ *
* @param order 订单信息
* @return 对应页面重定向信息
*/
String toPay(PayOrder order);
+
/**
* 创建签名
*
@@ -123,7 +128,7 @@ public interface PayService {
/**
* 获取输出消息,用户返回给支付端
*
- * @param code 状态
+ * @param code 状态
* @param message 消息
* @return 返回输出消息
*/
@@ -132,6 +137,7 @@ public interface PayService {
/**
* 获取成功输出消息,用户返回给支付端
* 主要用于拦截器中返回
+ *
* @param payMessage 支付回调消息
* @return 返回输出消息
*/
@@ -148,7 +154,6 @@ public interface PayService {
String buildRequest(Map orderInfo, MethodType method);
-
/**
* 获取输出二维码,用户返回给支付端,
*
@@ -163,7 +168,7 @@ public interface PayService {
* @param order 发起支付的订单信息
* @return 返回支付结果
*/
- Map microPay(PayOrder order);
+ Map microPay(PayOrder order);
/**
* 交易查询接口
@@ -176,13 +181,14 @@ public interface PayService {
/**
* 交易查询接口,带处理器
+ *
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
- * @return 返回查询回来的结果集
+ * @param callback 处理器
+ * @param 返回类型
+ * @return 返回查询回来的结果集
*/
- T query(String tradeNo, String outTradeNo, Callback callback);
+ T query(String tradeNo, String outTradeNo, Callback callback);
/**
* 交易关闭接口
@@ -199,11 +205,11 @@ public interface PayService {
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方交易关闭后的结果
*/
- T close(String tradeNo, String outTradeNo, Callback callback);
+ T close(String tradeNo, String outTradeNo, Callback callback);
/**
* 交易交易撤销
@@ -219,55 +225,59 @@ public interface PayService {
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方交易撤销后的结果
*/
- T cancel(String tradeNo, String outTradeNo, Callback callback);
+ T cancel(String tradeNo, String outTradeNo, Callback callback);
/**
* 申请退款接口
* 废弃
- * @param tradeNo 支付平台订单号
- * @param outTradeNo 商户单号
+ *
+ * @param tradeNo 支付平台订单号
+ * @param outTradeNo 商户单号
* @param refundAmount 退款金额
- * @param totalAmount 总金额
+ * @param totalAmount 总金额
* @return 返回支付方申请退款后的结果
* @see #refund(RefundOrder)
*/
@Deprecated
Map refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount);
+
/**
* 申请退款接口
* 废弃
- * @param tradeNo 支付平台订单号
- * @param outTradeNo 商户单号
+ *
+ * @param tradeNo 支付平台订单号
+ * @param outTradeNo 商户单号
* @param refundAmount 退款金额
- * @param totalAmount 总金额
- * @param callback 处理器
- * @param 返回类型
+ * @param totalAmount 总金额
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方申请退款后的结果
* @see #refund(RefundOrder, Callback)
*/
@Deprecated
- T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback);
+ T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback);
/**
* 申请退款接口
*
- * @param refundOrder 退款订单信息
+ * @param refundOrder 退款订单信息
* @return 返回支付方申请退款后的结果
*/
Map refund(RefundOrder refundOrder);
+
/**
* 申请退款接口
*
- * @param refundOrder 退款订单信息
- * @param callback 处理器
- * @param 返回类型
+ * @param refundOrder 退款订单信息
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方申请退款后的结果
*/
- T refund(RefundOrder refundOrder, Callback callback);
+ T refund(RefundOrder refundOrder, Callback callback);
/**
* 查询退款
@@ -278,33 +288,36 @@ public interface PayService {
*/
@Deprecated
Map refundquery(String tradeNo, String outTradeNo);
+
/**
* 查询退款
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
- * @param callback 处理器
- * @param 返回类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方查询退款后的结果
*/
@Deprecated
- T refundquery(String tradeNo, String outTradeNo, Callback callback);
+ T refundquery(String tradeNo, String outTradeNo, Callback callback);
+
/**
* 查询退款
*
- * @param refundOrder 退款订单单号信息
+ * @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
Map refundquery(RefundOrder refundOrder);
+
/**
* 查询退款
*
- * @param refundOrder 退款订单信息
- * @param callback 处理器
- * @param 返回类型
+ * @param refundOrder 退款订单信息
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方查询退款后的结果
*/
- T refundquery(RefundOrder refundOrder, Callback callback);
+ T refundquery(RefundOrder refundOrder, Callback callback);
/**
* 下载对账单
@@ -321,18 +334,19 @@ public interface PayService {
* @param billDate 账单时间:具体请查看对应支付平台
* @param billType 账单类型,具体请查看对应支付平台
* @param callback 处理器
- * @param 返回类型
+ * @param 返回类型
* @return 返回支付方下载对账单的结果
*/
- T downloadbill(Date billDate, String billType, Callback callback);
+ T downloadbill(Date billDate, String billType, Callback callback);
/**
* 通用查询接口
- * @param tradeNoOrBillDate 支付平台订单号或者账单类型, 具体请
- * 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
- * @param outTradeNoBillType 商户单号或者 账单类型
- * @param transactionType 交易类型
+ *
+ * @param tradeNoOrBillDate 支付平台订单号或者账单类型, 具体请
+ * 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
+ * @param outTradeNoBillType 商户单号或者 账单类型
+ * @param transactionType 交易类型
* @return 返回支付方对应接口的结果
*/
Map secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType);
@@ -340,56 +354,56 @@ public interface PayService {
/**
* 通用查询接口
*
- * @param tradeNoOrBillDate 支付平台订单号或者账单日期, 具体请 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
- *
- * @param outTradeNoBillType 商户单号或者 账单类型
- * @param transactionType 交易类型
- * @param callback 处理器
- * @param 返回类型
+ * @param tradeNoOrBillDate 支付平台订单号或者账单日期, 具体请 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
+ * @param outTradeNoBillType 商户单号或者 账单类型
+ * @param transactionType 交易类型
+ * @param callback 处理器
+ * @param 返回类型
* @return 返回支付方对应接口的结果
*/
- T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback);
+ T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback);
/**
* 转账
+ *
* @param order 转账订单
* @return 对应的转账结果
*/
Map transfer(TransferOrder order);
+
/**
* 转账
- * @param order 转账订单
+ *
+ * @param order 转账订单
* @param callback 处理器
- * @param 返回类型
+ * @param 返回类型
* @return 对应的转账结果
*/
- T transfer(TransferOrder order, Callback callback);
-
+ T transfer(TransferOrder order, Callback callback);
/**
* 转账查询
*
- * @param outNo 商户转账订单号
+ * @param outNo 商户转账订单号
* @param tradeNo 支付平台转账订单号
- *
* @return 对应的转账订单
*/
- Map transferQuery(String outNo, String tradeNo);
+ Map transferQuery(String outNo, String tradeNo);
/**
* 转账查询
*
- * @param outNo 商户转账订单号
- * @param tradeNo 支付平台转账订单号
+ * @param outNo 商户转账订单号
+ * @param tradeNo 支付平台转账订单号
* @param callback 处理器
- * @param 返回类型
+ * @param 返回类型
* @return 对应的转账订单
*/
- T transferQuery(String outNo, String tradeNo, Callback callback);
+ T transferQuery(String outNo, String tradeNo, Callback callback);
- /**
+ /**
* 将请求参数或者请求流转化为 Map
*
* @param parameterMap 请求参数
@@ -400,29 +414,36 @@ public interface PayService {
/**
* 设置支付消息处理器,这里用于处理具体的支付业务
+ *
* @param handler 消息处理器
- * 配合{@link com.egzosn.pay.common.api.PayService#payBack(java.util.Map, java.io.InputStream)}进行使用
- *
- * 默认使用{@link com.egzosn.pay.common.api.DefaultPayMessageHandler }进行实现
- *
+ * 配合{@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 }进行实现
- *
+ * 配合{@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);
/**
- * 获取支付请求地址
+ * 获取支付请求地址
+ *
* @param transactionType 交易类型
* @return 请求地址
*/
- String getReqUrl(TransactionType transactionType);
+ String getReqUrl(TransactionType transactionType);
+ /**
+ * 创建消息
+ * @param message 支付平台返回的消息
+ * @return 支付消息对象
+ */
+ PayMessage createMessage(Map message);
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java
index cff3dc2..1836758 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java
@@ -24,12 +24,16 @@ public class PayMessage implements Serializable {
private String fromPay;
private String describe;
+
+ public PayMessage() {
+ }
+
public PayMessage(Map payMessage) {
this.payMessage = payMessage;
}
public PayMessage(Map payMessage, String payType, String msgType) {
- this(payMessage);
+ this.payMessage = payMessage;
this.payType = payType;
this.msgType = msgType;
}
@@ -42,6 +46,10 @@ public class PayMessage implements Serializable {
this.transactionType = transactionType;
}
+ protected void setPayMessage(Map payMessage) {
+ this.payMessage = payMessage;
+ }
+
public String getMsgType() {
return msgType;
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java
index 39081ea..b101b44 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java
@@ -1,8 +1,11 @@
package com.egzosn.pay.common.util;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.http.util.Args;
import java.lang.ref.SoftReference;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -16,7 +19,10 @@ import java.util.*;
*
*/
public final class DateUtils {
+ private DateUtils() {
+ }
+ private static final Log LOG = LogFactory.getLog(DateUtils.class);
static final class DateFormatHolder {
private static final ThreadLocal>> THREADLOCAL_FORMATS = new ThreadLocal>>();
@@ -60,11 +66,28 @@ public final class DateUtils {
SimpleDateFormat formatFor = DateFormatHolder.formatFor(pattern);
return formatFor.format(date);
}
-
+ public static Date parseDate(String date, String pattern) {
+ Args.notNull(date, "Date");
+ Args.notNull(pattern, "Pattern");
+ SimpleDateFormat formatFor = DateFormatHolder.formatFor(pattern);
+ try {
+ return formatFor.parse(date);
+ } catch (ParseException e) {
+ LOG.error(e);
+ }
+ return null;
+ }
+ public static Date parse(String date) {
+ return parseDate(date, YYYY_MM_DD_HH_MM_SS);
+ }
public static final String format(Date date) {
return formatDate(date, YYYY_MM_DD_HH_MM_SS);
}
+ public static final Date parseDay(String date) {
+ return parseDate(date, YYYY_MM_DD);
+ }
+
public static final String formatDay(Date date) {
return formatDate(date, YYYY_MM_DD);
}