@@ -14,7 +14,9 @@ import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | |||||
import java.util.concurrent.ExecutionException; | import java.util.concurrent.ExecutionException; | ||||
import java.util.concurrent.ExecutorService; | import java.util.concurrent.ExecutorService; | ||||
import java.util.concurrent.Executors; | import java.util.concurrent.Executors; | ||||
@@ -135,8 +137,9 @@ public class WxCpMessageRouter { | |||||
* 处理微信消息 | * 处理微信消息 | ||||
* | * | ||||
* @param wxMessage | * @param wxMessage | ||||
* @param context | |||||
*/ | */ | ||||
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) { | |||||
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage, final Map<String, Object> context) { | |||||
if (isDuplicateMessage(wxMessage)) { | if (isDuplicateMessage(wxMessage)) { | ||||
// 如果是重复消息,那么就不做处理 | // 如果是重复消息,那么就不做处理 | ||||
return null; | return null; | ||||
@@ -166,12 +169,12 @@ public class WxCpMessageRouter { | |||||
this.executorService.submit(new Runnable() { | this.executorService.submit(new Runnable() { | ||||
@Override | @Override | ||||
public void run() { | public void run() { | ||||
rule.service(wxMessage, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler); | |||||
rule.service(wxMessage, context, WxCpMessageRouter.this.wxCpService, WxCpMessageRouter.this.sessionManager, WxCpMessageRouter.this.exceptionHandler); | |||||
} | } | ||||
}) | }) | ||||
); | ); | ||||
} else { | } else { | ||||
res = rule.service(wxMessage, this.wxCpService, this.sessionManager, this.exceptionHandler); | |||||
res = rule.service(wxMessage, context, this.wxCpService, this.sessionManager, this.exceptionHandler); | |||||
// 在同步操作结束,session访问结束 | // 在同步操作结束,session访问结束 | ||||
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName()); | this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUserName()); | ||||
sessionEndAccess(wxMessage); | sessionEndAccess(wxMessage); | ||||
@@ -200,6 +203,16 @@ public class WxCpMessageRouter { | |||||
return res; | return res; | ||||
} | } | ||||
/** | |||||
* 处理微信消息 | |||||
* | |||||
* @param wxMessage | |||||
*/ | |||||
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) { | |||||
return this.route(wxMessage, new HashMap<String, Object>()); | |||||
} | |||||
protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) { | protected boolean isDuplicateMessage(WxCpXmlMessage wxMessage) { | ||||
String messageId = ""; | String messageId = ""; | ||||
@@ -229,13 +229,16 @@ public class WxCpMessageRouterRule { | |||||
* @return true 代表继续执行别的router,false 代表停止执行别的router | * @return true 代表继续执行别的router,false 代表停止执行别的router | ||||
*/ | */ | ||||
protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage, | protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage, | ||||
Map<String, Object> context, | |||||
WxCpService wxCpService, | WxCpService wxCpService, | ||||
WxSessionManager sessionManager, | WxSessionManager sessionManager, | ||||
WxErrorExceptionHandler exceptionHandler) { | WxErrorExceptionHandler exceptionHandler) { | ||||
try { | |||||
if (context == null) { | |||||
context = new HashMap<>(); | |||||
} | |||||
Map<String, Object> context = new HashMap<>(); | |||||
try { | |||||
// 如果拦截器不通过 | // 如果拦截器不通过 | ||||
for (WxCpMessageInterceptor interceptor : this.interceptors) { | for (WxCpMessageInterceptor interceptor : this.interceptors) { | ||||
if (!interceptor.intercept(wxMessage, context, wxCpService, sessionManager)) { | if (!interceptor.intercept(wxMessage, context, wxCpService, sessionManager)) { | ||||
@@ -14,7 +14,9 @@ import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | |||||
import java.util.concurrent.ExecutionException; | import java.util.concurrent.ExecutionException; | ||||
import java.util.concurrent.ExecutorService; | import java.util.concurrent.ExecutorService; | ||||
import java.util.concurrent.Executors; | import java.util.concurrent.Executors; | ||||
@@ -126,7 +128,7 @@ public class WxMpMessageRouter { | |||||
/** | /** | ||||
* 处理微信消息 | * 处理微信消息 | ||||
*/ | */ | ||||
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) { | |||||
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, final Map<String, Object> context) { | |||||
if (isMsgDuplicated(wxMessage)) { | if (isMsgDuplicated(wxMessage)) { | ||||
// 如果是重复消息,那么就不做处理 | // 如果是重复消息,那么就不做处理 | ||||
return null; | return null; | ||||
@@ -156,12 +158,12 @@ public class WxMpMessageRouter { | |||||
this.executorService.submit(new Runnable() { | this.executorService.submit(new Runnable() { | ||||
@Override | @Override | ||||
public void run() { | public void run() { | ||||
rule.service(wxMessage, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler); | |||||
rule.service(wxMessage, context, WxMpMessageRouter.this.wxMpService, WxMpMessageRouter.this.sessionManager, WxMpMessageRouter.this.exceptionHandler); | |||||
} | } | ||||
}) | }) | ||||
); | ); | ||||
} else { | } else { | ||||
res = rule.service(wxMessage, this.wxMpService, this.sessionManager, this.exceptionHandler); | |||||
res = rule.service(wxMessage, context, this.wxMpService, this.sessionManager, this.exceptionHandler); | |||||
// 在同步操作结束,session访问结束 | // 在同步操作结束,session访问结束 | ||||
this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser()); | this.log.debug("End session access: async=false, sessionId={}", wxMessage.getFromUser()); | ||||
sessionEndAccess(wxMessage); | sessionEndAccess(wxMessage); | ||||
@@ -188,6 +190,10 @@ public class WxMpMessageRouter { | |||||
return res; | return res; | ||||
} | } | ||||
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) { | |||||
return this.route(wxMessage, new HashMap<String, Object>()); | |||||
} | |||||
protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) { | protected boolean isMsgDuplicated(WxMpXmlMessage wxMessage) { | ||||
StringBuilder messageId = new StringBuilder(); | StringBuilder messageId = new StringBuilder(); | ||||
@@ -193,13 +193,16 @@ public class WxMpMessageRouterRule { | |||||
* @return true 代表继续执行别的router,false 代表停止执行别的router | * @return true 代表继续执行别的router,false 代表停止执行别的router | ||||
*/ | */ | ||||
protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage, | protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage, | ||||
Map<String, Object> context, | |||||
WxMpService wxMpService, | WxMpService wxMpService, | ||||
WxSessionManager sessionManager, | WxSessionManager sessionManager, | ||||
WxErrorExceptionHandler exceptionHandler) { | WxErrorExceptionHandler exceptionHandler) { | ||||
try { | |||||
if (context == null) { | |||||
context = new HashMap<>(); | |||||
} | |||||
Map<String, Object> context = new HashMap<>(); | |||||
try { | |||||
// 如果拦截器不通过 | // 如果拦截器不通过 | ||||
for (WxMpMessageInterceptor interceptor : this.interceptors) { | for (WxMpMessageInterceptor interceptor : this.interceptors) { | ||||
if (!interceptor.intercept(wxMessage, context, wxMpService, sessionManager)) { | if (!interceptor.intercept(wxMessage, context, wxMpService, sessionManager)) { | ||||