| @@ -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)) { | ||||