From c903bebe8a0b56ceeeff13a1af98caf22a64fcfd Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Wed, 24 Apr 2019 14:56:26 +0800 Subject: [PATCH 01/20] =?UTF-8?q?[=E5=85=B3=E6=B3=A8=E4=BA=8B=E4=BB=B6][?= =?UTF-8?q?=E4=BF=AE=E6=94=B9]:=E4=BA=8B=E4=BB=B6=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/service/impl/WxCUserServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index 2a63e9f..8b9a5e9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -131,11 +131,11 @@ public class WxCUserServiceImpl implements WxCUserService { if(authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { userQ.setMpSubscribe(mpUser.getSubscribe()?1:0); userQ.setMpSubscribeScene(mpUser.getSubscribeScene()); - userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime())); + userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime()*1000)); } else if(authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { userQ.setSubsSubscribe(mpUser.getSubscribe()?1:0); userQ.setSubsSubscribeScene(mpUser.getSubscribeScene()); - userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime())); + userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime()*1000L)); } return saveOrUpdate(userQ); } From 2b2103170bfeed6921e2fa4fcab3e152ad577342 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 10:02:04 +0800 Subject: [PATCH 02/20] =?UTF-8?q?[=E6=A3=80=E6=9F=A5=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=95=B0][=E4=BF=AE=E6=94=B9]:=E6=89=93=E5=8D=B0=E5=8D=A0?= =?UTF-8?q?=E7=94=A8=E7=BA=BF=E7=A8=8B=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WechatCalllbackController.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index b6c886f..abd98a9 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -283,10 +283,12 @@ public class WechatCalllbackController extends BaseController { return; } } else { + getThreadCount( 0 ); // 公众号 WxMpService mpService = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); try { WxMpXmlOutMessage outMessage = mpManager.getRouter(mpService).route(inMessage); + getThreadCount( 1 ); if (outMessage == null) { this.logger.info("2 return: success"); printWriter.print("success"); @@ -307,6 +309,24 @@ public class WechatCalllbackController extends BaseController { printWriter.close(); } + private void getThreadCount( int i) { + ThreadGroup group = Thread.currentThread().getThreadGroup(); + ThreadGroup topGroup = group; + // 遍历线程组树,获取根线程组 + while (group != null) { + topGroup = group; + group = group.getParent(); + } + // 激活的线程数加倍 + int estimatedSize = topGroup.activeCount() * 2; + Thread[] slackList = new Thread[estimatedSize]; + // 获取根线程组的所有线程 + int actualSize = topGroup.enumerate(slackList); + // copy into a list that is the exact size + logger.info("Thread list size == " + i + " : " + actualSize); + + } + private void updateAuditStatus(String appId, boolean success, String reason) { From 724e781ad1ee9ad05a7405e25d0adf3b519d1740 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 14:37:00 +0800 Subject: [PATCH 03/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iformall/mp/manager/WxMpManager.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index e8d8f9d..5b52a44 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -1,7 +1,6 @@ package com.iformall.mp.manager; import com.iformall.mp.handler.*; -import com.iformall.service.WxAppinfoService; import com.iformall.service.wechat.FmOpenService; import me.chanjar.weixin.mp.api.WxMpMessageRouter; import me.chanjar.weixin.mp.api.WxMpService; @@ -9,6 +8,9 @@ import me.chanjar.weixin.mp.constant.WxMpEventConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import static me.chanjar.weixin.common.api.WxConsts.*; /** @@ -19,12 +21,11 @@ import static me.chanjar.weixin.common.api.WxConsts.*; @Service public class WxMpManager { + private Map myRouterMap = new ConcurrentHashMap(); - @Autowired - protected FmOpenService openService; @Autowired - private WxAppinfoService appinfoService; + protected FmOpenService openService; @Autowired private LogHandler logHandler; @Autowired @@ -49,7 +50,12 @@ public class WxMpManager { } public WxMpMessageRouter getRouter(WxMpService mpService) { - return newRouter(mpService); + String appId = mpService.getWxMpConfigStorage().getAppId(); + if (myRouterMap.containsKey(appId)) { + return myRouterMap.get(appId); + } else { + return newRouter(mpService); + } } private WxMpMessageRouter newRouter(WxMpService wxMpService) { @@ -122,6 +128,8 @@ public class WxMpManager { // 默认 newRouter.rule().async(false).handler(this.msgHandler).end(); + myRouterMap.put(wxMpService.getWxMpConfigStorage().getAppId(), newRouter); + return newRouter; } From 8f6e96ca1fb991c5c4658ddde3d0cfbba234a185 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 14:54:42 +0800 Subject: [PATCH 04/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/iformall/mp/manager/WxMpManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index 5b52a44..cdf2dac 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -21,7 +21,7 @@ import static me.chanjar.weixin.common.api.WxConsts.*; @Service public class WxMpManager { - private Map myRouterMap = new ConcurrentHashMap(); + private static Map myRouterMap = new ConcurrentHashMap(); @Autowired From 9daac0312c486b45cfe43a0f49e86665703e5301 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 14:58:05 +0800 Subject: [PATCH 05/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/iformall/mp/manager/WxMpManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index cdf2dac..ee62fe6 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -5,6 +5,8 @@ import com.iformall.service.wechat.FmOpenService; import me.chanjar.weixin.mp.api.WxMpMessageRouter; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.constant.WxMpEventConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -21,6 +23,8 @@ import static me.chanjar.weixin.common.api.WxConsts.*; @Service public class WxMpManager { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private static Map myRouterMap = new ConcurrentHashMap(); @@ -52,8 +56,10 @@ public class WxMpManager { public WxMpMessageRouter getRouter(WxMpService mpService) { String appId = mpService.getWxMpConfigStorage().getAppId(); if (myRouterMap.containsKey(appId)) { + logger.info("found appId : ", appId); return myRouterMap.get(appId); } else { + logger.info("found new appId : ", appId); return newRouter(mpService); } } From 1da4cc962a64f7b3191eb7e5e1a6da3eb6454812 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 15:23:27 +0800 Subject: [PATCH 06/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B,=20?= =?UTF-8?q?=E6=89=93=E5=8D=B0appId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WechatCalllbackController.java | 3 +-- .../com/iformall/mp/handler/SubscribeHandler.java | 4 ++-- .../com/iformall/mp/handler/UnsubscribeHandler.java | 5 +++-- .../java/com/iformall/mp/manager/WxMpManager.java | 11 ++++++----- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index abd98a9..25c5c02 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -285,9 +285,8 @@ public class WechatCalllbackController extends BaseController { } else { getThreadCount( 0 ); // 公众号 - WxMpService mpService = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); try { - WxMpXmlOutMessage outMessage = mpManager.getRouter(mpService).route(inMessage); + WxMpXmlOutMessage outMessage = mpManager.getRouter(appId).route(inMessage); getThreadCount( 1 ); if (outMessage == null) { this.logger.info("2 return: success"); diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java index 703dfac..b763d4f 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java @@ -31,10 +31,10 @@ public class SubscribeHandler extends AbstractHandler { public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService weixinService, WxSessionManager sessionManager) throws WxErrorException { + String appId = weixinService.getWxMpConfigStorage().getAppId(); - this.logger.info("新关注用户 OPENID: " + wxMessage.getFromUser()); + this.logger.info("新关注用户 OPENID: " + wxMessage.getFromUser() + ", AppId: " + appId); - String appId = weixinService.getWxMpConfigStorage().getAppId(); WxAuthorizerInfo authQ = new WxAuthorizerInfo(); authQ.setAuthorizerAppid(appId); WxAuthorizerInfo authorizerInfo = wxAuthorizerInfoMapper.findWeChatMp(authQ); diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java index a20d9a6..b9202e9 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java @@ -29,9 +29,10 @@ public class UnsubscribeHandler extends AbstractHandler { public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) { - String openId = wxMessage.getFromUser(); - this.logger.info("取消关注用户 OPENID: " + openId); String appId = wxMpService.getWxMpConfigStorage().getAppId(); + String openId = wxMessage.getFromUser(); + this.logger.info("取消关注用户 OPENID: " + openId+ ", AppId: " + appId); + WxAuthorizerInfo authQ = new WxAuthorizerInfo(); authQ.setAuthorizerAppid(appId); WxAuthorizerInfo authorizerInfo = wxAuthorizerInfoMapper.findWeChatMp(authQ); diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index ee62fe6..178e711 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -53,14 +53,17 @@ public class WxMpManager { return openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); } - public WxMpMessageRouter getRouter(WxMpService mpService) { - String appId = mpService.getWxMpConfigStorage().getAppId(); + public WxMpMessageRouter getRouter(String appId) { + if (myRouterMap.containsKey(appId)) { logger.info("found appId : ", appId); return myRouterMap.get(appId); } else { + WxMpService wxMpService = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); + WxMpMessageRouter newRouter = newRouter(wxMpService); + myRouterMap.put(appId, newRouter); logger.info("found new appId : ", appId); - return newRouter(mpService); + return newRouter; } } @@ -134,8 +137,6 @@ public class WxMpManager { // 默认 newRouter.rule().async(false).handler(this.msgHandler).end(); - myRouterMap.put(wxMpService.getWxMpConfigStorage().getAppId(), newRouter); - return newRouter; } From c1a4ff344e721dacdd4952c17adeee4a82fb09c5 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 15:26:22 +0800 Subject: [PATCH 07/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B,=20?= =?UTF-8?q?=E6=89=93=E5=8D=B0appId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iformall/mp/controller/WxMpCallBackController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/controller/WxMpCallBackController.java b/mlWechatOpen/src/main/java/com/iformall/mp/controller/WxMpCallBackController.java index 0ef75a6..698cc09 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/controller/WxMpCallBackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/controller/WxMpCallBackController.java @@ -138,8 +138,10 @@ public class WxMpCallBackController { } private WxMpXmlOutMessage route(WxMpXmlMessage message, WxMpService wxService) { + String appId = wxService.getWxMpConfigStorage().getAppId(); + logger.info("route appId: " + appId); try { - return wxMpManager.getRouter(wxService).route(message); + return wxMpManager.getRouter(appId).route(message); } catch (Exception e) { this.logger.error("路由消息时出现异常!", e); } From f557a1e159876fc0d3de593fe9437c3c015559b6 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 15:33:53 +0800 Subject: [PATCH 08/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B,=20?= =?UTF-8?q?=E6=89=93=E5=8D=B0appId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/controller/WechatCalllbackController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 25c5c02..31a12c8 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -283,6 +283,7 @@ public class WechatCalllbackController extends BaseController { return; } } else { + logger.info("unknown event, appId: " + appId); getThreadCount( 0 ); // 公众号 try { From 20ca98559cd0e0a702bd6273901d2c50e6b3a622 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 15:36:21 +0800 Subject: [PATCH 09/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=9C=89=E7=BA=BF=E7=A8=8B,=20?= =?UTF-8?q?=E6=89=93=E5=8D=B0appId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/iformall/mp/manager/WxMpManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index 178e711..6cabff2 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -56,13 +56,13 @@ public class WxMpManager { public WxMpMessageRouter getRouter(String appId) { if (myRouterMap.containsKey(appId)) { - logger.info("found appId : ", appId); + logger.info("found appId : " + appId); return myRouterMap.get(appId); } else { WxMpService wxMpService = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); WxMpMessageRouter newRouter = newRouter(wxMpService); myRouterMap.put(appId, newRouter); - logger.info("found new appId : ", appId); + logger.info("found new appId : " + appId); return newRouter; } } From 2571e86c7b403181e0c92141db35c1df9de2e41b Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 15:50:55 +0800 Subject: [PATCH 10/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?handle=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iformall/mp/manager/WxMpManager.java | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index 6cabff2..d4a1752 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -30,24 +30,16 @@ public class WxMpManager { @Autowired protected FmOpenService openService; - @Autowired - private LogHandler logHandler; - @Autowired - private NullHandler nullHandler; - @Autowired - private KfSessionHandler kfSessionHandler; - @Autowired - private StoreCheckNotifyHandler storeCheckNotifyHandler; - @Autowired - private LocationHandler locationHandler; - @Autowired - private MenuHandler menuHandler; - @Autowired - private MsgHandler msgHandler; - @Autowired - private UnsubscribeHandler unsubscribeHandler; - @Autowired - private SubscribeHandler subscribeHandler; + + private LogHandler logHandler = new LogHandler(); + private NullHandler nullHandler = new NullHandler(); + private KfSessionHandler kfSessionHandler = new KfSessionHandler(); + private StoreCheckNotifyHandler storeCheckNotifyHandler = new StoreCheckNotifyHandler(); + private LocationHandler locationHandler = new LocationHandler(); + private MenuHandler menuHandler = new MenuHandler(); + private MsgHandler msgHandler = new MsgHandler(); + private UnsubscribeHandler unsubscribeHandler = new UnsubscribeHandler(); + private SubscribeHandler subscribeHandler = new SubscribeHandler(); public WxMpService getMpService(String appId) { return openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); From adfecd7789801b51924a0edcde9b2d6a7bbe2775 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 15:54:38 +0800 Subject: [PATCH 11/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?handle=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/iformall/mp/handler/SubscribeHandler.java | 4 ++-- .../main/java/com/iformall/mp/handler/UnsubscribeHandler.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java index b763d4f..03105dd 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java @@ -11,14 +11,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import java.util.Map; /** * @author Binary Wang(https://github.com/binarywang) */ -@Component +@Service public class SubscribeHandler extends AbstractHandler { @Autowired diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java index b9202e9..2393847 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java @@ -9,14 +9,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import java.util.Map; /** * @author Binary Wang(https://github.com/binarywang) */ -@Component +@Service public class UnsubscribeHandler extends AbstractHandler { @Autowired From 2d8e102ae5849d54e385490db57ab68f920f0829 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 16:02:00 +0800 Subject: [PATCH 12/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?handle=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/mp/handler/SubscribeHandler.java | 4 +-- .../mp/handler/UnsubscribeHandler.java | 4 +-- .../com/iformall/mp/manager/WxMpManager.java | 31 ++++++++++++------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java index 03105dd..b763d4f 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java @@ -11,14 +11,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Component; import java.util.Map; /** * @author Binary Wang(https://github.com/binarywang) */ -@Service +@Component public class SubscribeHandler extends AbstractHandler { @Autowired diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java index 2393847..b9202e9 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java @@ -9,14 +9,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Component; import java.util.Map; /** * @author Binary Wang(https://github.com/binarywang) */ -@Service +@Component public class UnsubscribeHandler extends AbstractHandler { @Autowired diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index d4a1752..eaef619 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -31,22 +31,30 @@ public class WxMpManager { @Autowired protected FmOpenService openService; - private LogHandler logHandler = new LogHandler(); - private NullHandler nullHandler = new NullHandler(); - private KfSessionHandler kfSessionHandler = new KfSessionHandler(); - private StoreCheckNotifyHandler storeCheckNotifyHandler = new StoreCheckNotifyHandler(); - private LocationHandler locationHandler = new LocationHandler(); - private MenuHandler menuHandler = new MenuHandler(); - private MsgHandler msgHandler = new MsgHandler(); - private UnsubscribeHandler unsubscribeHandler = new UnsubscribeHandler(); - private SubscribeHandler subscribeHandler = new SubscribeHandler(); + @Autowired + protected LogHandler logHandler; + @Autowired + protected NullHandler nullHandler; + @Autowired + protected KfSessionHandler kfSessionHandler; + @Autowired + protected StoreCheckNotifyHandler storeCheckNotifyHandler; + @Autowired + protected LocationHandler locationHandler; + @Autowired + protected MenuHandler menuHandler; + @Autowired + protected MsgHandler msgHandler; + @Autowired + protected UnsubscribeHandler unsubscribeHandler; + @Autowired + protected SubscribeHandler subscribeHandler; public WxMpService getMpService(String appId) { return openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); } public WxMpMessageRouter getRouter(String appId) { - if (myRouterMap.containsKey(appId)) { logger.info("found appId : " + appId); return myRouterMap.get(appId); @@ -64,6 +72,7 @@ public class WxMpManager { // 记录所有事件的日志 (异步执行) newRouter.rule().handler(this.logHandler).next(); + /* // 接收客服会话管理事件 newRouter.rule().async(false) @@ -128,7 +137,7 @@ public class WxMpManager { // 默认 newRouter.rule().async(false).handler(this.msgHandler).end(); - + */ return newRouter; } From 6fbf9fe5d92fb0bdeb5d08a3958ca45956fe3a71 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 16:04:48 +0800 Subject: [PATCH 13/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?handle=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/iformall/mp/manager/WxMpManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index eaef619..37aaaf3 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -69,10 +69,10 @@ public class WxMpManager { private WxMpMessageRouter newRouter(WxMpService wxMpService) { final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService); - + /* // 记录所有事件的日志 (异步执行) newRouter.rule().handler(this.logHandler).next(); - /* + // 接收客服会话管理事件 newRouter.rule().async(false) From a9ff984ec0eaecbe41c1ae62cdc65bb79578f71a Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 16:15:22 +0800 Subject: [PATCH 14/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?handle=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/controller/WechatCalllbackController.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 31a12c8..4e3a29f 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -284,6 +284,7 @@ public class WechatCalllbackController extends BaseController { } } else { logger.info("unknown event, appId: " + appId); + getThreadCount( 0 ); // 公众号 try { @@ -318,12 +319,9 @@ public class WechatCalllbackController extends BaseController { group = group.getParent(); } // 激活的线程数加倍 - int estimatedSize = topGroup.activeCount() * 2; - Thread[] slackList = new Thread[estimatedSize]; - // 获取根线程组的所有线程 - int actualSize = topGroup.enumerate(slackList); + int activeCount = topGroup.activeCount(); // copy into a list that is the exact size - logger.info("Thread list size == " + i + " : " + actualSize); + logger.info("Thread list size == " + i + " : " + activeCount); } From 6721911b8cdfe62235e7246752e301c3d575d6d3 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 16:18:04 +0800 Subject: [PATCH 15/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?handle=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/iformall/mp/manager/WxMpManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java index 37aaaf3..bbcdf70 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/manager/WxMpManager.java @@ -69,7 +69,7 @@ public class WxMpManager { private WxMpMessageRouter newRouter(WxMpService wxMpService) { final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService); - /* + // 记录所有事件的日志 (异步执行) newRouter.rule().handler(this.logHandler).next(); @@ -137,7 +137,7 @@ public class WxMpManager { // 默认 newRouter.rule().async(false).handler(this.msgHandler).end(); - */ + return newRouter; } From 1b393e76c86e2f8126961b1006266269fa67cd7b Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 17:45:34 +0800 Subject: [PATCH 16/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BA=BF=E7=A8=8BID=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlWechatOpen/src/main/resources/logback-spring.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mlWechatOpen/src/main/resources/logback-spring.xml b/mlWechatOpen/src/main/resources/logback-spring.xml index 2525413..80e8379 100644 --- a/mlWechatOpen/src/main/resources/logback-spring.xml +++ b/mlWechatOpen/src/main/resources/logback-spring.xml @@ -5,7 +5,7 @@ - [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] --%mdc{client}%msg%n + [%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level] --%mdc{client}%msg%n @@ -16,7 +16,7 @@ 180 - [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + [%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level][%logger:%line]--%mdc{client} %msg%n @@ -27,7 +27,7 @@ 180 - [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + [%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level][%logger:%line]--%mdc{client} %msg%n INFO @@ -43,7 +43,7 @@ 180 - [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + [%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level][%logger:%line]--%mdc{client} %msg%n DEBUG @@ -60,7 +60,7 @@ 180 - [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + [%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level][%logger:%line]--%mdc{client} %msg%n WARN @@ -78,7 +78,7 @@ 180 - [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + [%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%-5level][%logger:%line]--%mdc{client} %msg%n ERROR From 629009be87e4578ca7c7c640d267e3edd4e6f110 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 17:46:28 +0800 Subject: [PATCH 17/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86=E6=95=B4=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=BC=82=E6=AD=A5=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WechatCalllbackController.java | 361 ++++++++++++------ 1 file changed, 235 insertions(+), 126 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 4e3a29f..7a6fdcf 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -12,10 +12,10 @@ import com.iformall.service.wechat.FmOpenService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.open.bean.message.WxOpenXmlMessage; import me.chanjar.weixin.open.bean.result.WxOpenAuthorizerInfoResult; import me.chanjar.weixin.open.bean.result.WxOpenPlatformResult; @@ -62,6 +62,9 @@ public class WechatCalllbackController extends BaseController { @Autowired private WxAppinfoService appinfoService; + @Autowired + private WxCUserService userService; + @Autowired private MailService mailService; @@ -85,27 +88,27 @@ public class WechatCalllbackController extends BaseController { throw new IllegalArgumentException("非法请求,可能属于伪造的请求!"); } - InputStream inStream = request.getInputStream(); - ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int len = 0; - while ((len = inStream.read(buffer)) != -1) { - outSteam.write(buffer, 0, len); - } - String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); - logger.info(resultxml); - - outSteam.close(); - inStream.close(); + String resultxml = getRequestXML(request); logger.info("\n接收微信回调:[signature=[{}], encType=[{}], msgSignature=[{}]," + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", signature, encType, msgSignature, timestamp, nonce, resultxml); - // aes加密的消息 + // aes加密的消息, 解密 WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(resultxml, openService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); this.logger.info("接收微信回调,消息解密后内容为:{} ", inMessage.toString()); + + // 处理 + return handleTicket(inMessage); + } + + /** + * 处理ticket消息 + * @param inMessage + * @return + */ + private String handleTicket(WxOpenXmlMessage inMessage) { if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) { // 保存component_verify_ticket componentVerifyTicketService.saveOrUpdate(new WxComponentVerifyTicket() { @@ -116,33 +119,11 @@ public class WechatCalllbackController extends BaseController { setDeadline(new Date(Long.valueOf(System.currentTimeMillis() + (60 * 60 * 1000)))); } }); + return "success"; } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.AUTHORIZED.getMessage()) || inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UPDATEAUTHORIZED.getMessage())) { // 审核通过 - try { - WxOpenQueryAuthResult queryAuthResult = openService.getWxOpenComponentService().getQueryAuth(inMessage.getAuthorizationCode()); - logger.info("getQueryAuth", queryAuthResult); - - WxOpenAuthorizerInfoResult openAuthorizerInfoResult = openService.getWxOpenComponentService().getAuthorizerInfo( - queryAuthResult.getAuthorizationInfo().getAuthorizerAppid()); - logger.info(openAuthorizerInfoResult.toString()); - // save auth info - authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { - { - setAuthorizerAppid(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAppid()); - setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); - setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); - setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); - setRefreshToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerRefreshToken()); - setAccessToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAccessToken()); - setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + openAuthorizerInfoResult.getAuthorizationInfo().getExpiresIn()*1000))); - setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); - setAuthTime(new Date()); - } - }); - } catch (WxErrorException e) { - logger.error(e.getMessage()); - } + if (handleWeappAuditedMessage(inMessage)) return "success"; } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) { // 授权取消 authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { @@ -152,6 +133,7 @@ public class WechatCalllbackController extends BaseController { setAuthTime(new Date()); } }); + return "success"; } try { @@ -160,10 +142,44 @@ public class WechatCalllbackController extends BaseController { } catch (WxErrorException e) { this.logger.error("notify", e); } - return "success"; } + /** + * 处理小程序审核消息 + * @param inMessage + * @return + */ + private boolean handleWeappAuditedMessage(WxOpenXmlMessage inMessage) { + // 审核通过 + try { + WxOpenQueryAuthResult queryAuthResult = openService.getWxOpenComponentService().getQueryAuth(inMessage.getAuthorizationCode()); + logger.info("getQueryAuth", queryAuthResult); + + WxOpenAuthorizerInfoResult openAuthorizerInfoResult = openService.getWxOpenComponentService().getAuthorizerInfo( + queryAuthResult.getAuthorizationInfo().getAuthorizerAppid()); + logger.info(openAuthorizerInfoResult.toString()); + // save auth info + authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { + { + setAuthorizerAppid(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAppid()); + setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); + setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); + setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); + setRefreshToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerRefreshToken()); + setAccessToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAccessToken()); + setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + openAuthorizerInfoResult.getAuthorizationInfo().getExpiresIn()*1000))); + setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); + setAuthTime(new Date()); + } + }); + return true; + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } + return false; + } + @RequestMapping(value = "/{appId}/callback") @ApiOperation("消息回调") public void callback(@PathVariable("appId") String appId, HttpServletRequest request, HttpServletResponse response) throws IOException { @@ -181,18 +197,7 @@ public class WechatCalllbackController extends BaseController { throw new IllegalArgumentException("非法请求,可能属于伪造的请求!"); } - InputStream inStream = request.getInputStream(); - ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int len = 0; - while ((len = inStream.read(buffer)) != -1) { - outSteam.write(buffer, 0, len); - } - String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); - logger.info(resultxml); - - outSteam.close(); - inStream.close(); + String resultxml = getRequestXML(request); logger.info("接收微信APP回调:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}]," + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", @@ -200,101 +205,55 @@ public class WechatCalllbackController extends BaseController { String out = ""; - // aes加密的消息 + // aes加密的消息, 解密 WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(resultxml, openService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); logger.info("接收微信APP回调,消息解密后内容为:\n{}", inMessage.toString()); // 全网发布测试用例 if (StringUtils.equalsAnyIgnoreCase(appId, "wx570bc396a51b8ff8", "wxd101a85aa106f53e")) { - try { - if (StringUtils.equals(inMessage.getMsgType(), "text")) { - if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) { - out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml( - WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback") - .fromUser(inMessage.getToUser()) - .toUser(inMessage.getFromUser()) - .build(), - openService.getWxOpenConfigStorage() - ); - } else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) { - String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api"; - WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build(); - openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage); - } - } else if (StringUtils.equals(inMessage.getMsgType(), "event")) { - WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build(); - openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage); - } - } catch (WxErrorException e) { - logger.error("callback", e); - } - + handleWechatTest(appId, response, inMessage); PrintWriter printWriter = response.getWriter(); - printWriter.print("success"); - printWriter.flush(); - printWriter.close(); + wechatWriteSuccess(printWriter); return; } + // 实际 消息 处理 + handleCallbackMessage(appId, response, inMessage); + } + + /** + * 实际回调消息处理 + * @param appId + * @param response + * @param inMessage + * @throws IOException + */ + private void handleCallbackMessage(String appId, + HttpServletResponse response, + WxMpXmlMessage inMessage) throws IOException { WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId); PrintWriter printWriter = response.getWriter(); - if(authorizerInfo != null && - (authorizerInfo.getType().equals(EnumAppType.B.getCode()) || - authorizerInfo.getType().equals(EnumAppType.C.getCode()))) { - // 小程序 审核 消息 + // 小程序 消息 处理 + if(authorizerInfo != null && (authorizerInfo.getType() <= EnumAppType.C.getCode())) { /**判断消息类型,调用对应的方法*/ - switch (inMessage.getMsgType()) { - case "event": { - switch (inMessage.getEvent()) { - case "weapp_audit_success": { // 审核成功 - updateAuditStatus(appId, true, ""); - break; - } - case "weapp_audit_fail": { // 审核失败 - updateAuditStatus(appId, false, inMessage.getReason()); - break; - } - default: - break; - } - printWriter.print("success"); - printWriter.flush(); - printWriter.close(); - return; - } - case "text": - WxMpXmlOutMessage outMessage = openService.getWxOpenMessageRouter().route(inMessage, appId); - if (outMessage == null) { - printWriter.print("success"); - printWriter.flush(); - printWriter.close(); - return; - } - // out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMessage, openService.getWxOpenConfigStorage()); - // logger.info(out); - break; - default: - printWriter.print("success"); - printWriter.flush(); - printWriter.close(); - return; - } + handleWeappCallbackMessage(appId, inMessage); + wechatWriteSuccess(printWriter); + return; } else { - logger.info("unknown event, appId: " + appId); - - getThreadCount( 0 ); + handleMPCallbackMessage(appId, inMessage, authorizerInfo); + wechatWriteSuccess(printWriter); + return; + /* // 公众号 try { WxMpXmlOutMessage outMessage = mpManager.getRouter(appId).route(inMessage); getThreadCount( 1 ); if (outMessage == null) { this.logger.info("2 return: success"); - printWriter.print("success"); - printWriter.flush(); - printWriter.close(); + wechatWriteSuccess(printWriter); return; } // logger.info("组装回复" + outMessage.toXml()); @@ -303,13 +262,165 @@ public class WechatCalllbackController extends BaseController { } catch (Exception e) { logger.error("路由消息时出现异常!", e); } + */ } + } + /** + * 处理小程序回调消息 + * @param appId + * @param inMessage + */ + private void handleWeappCallbackMessage(String appId, WxMpXmlMessage inMessage) { + switch (inMessage.getMsgType()) { + case "event": { + switch (inMessage.getEvent()) { + case "weapp_audit_success": { // 审核成功 + updateAuditStatus(appId, true, ""); + break; + } + case "weapp_audit_fail": { // 审核失败 + updateAuditStatus(appId, false, inMessage.getReason()); + break; + } + default: + break; + } + return; + } + default: + return; + } + } + + /** + * 处理公众号回调消息 + * @param appId + * @param inMessage + * @param authorizerInfo + */ + private void handleMPCallbackMessage(String appId, WxMpXmlMessage inMessage, WxAuthorizerInfo authorizerInfo) { + switch (inMessage.getMsgType()) { + case "event": { + switch (inMessage.getEvent()) { + case "subscribe": { // 关注 + handleEventSubscribe(appId, inMessage, authorizerInfo); + break; + } + case "unsubscribe": { // 取消关注 + handleEventUnsubscribe(appId, inMessage, authorizerInfo); + break; + } + default: { + break; + } + } + return; + } + default: { + return; + } + } + } + + private void wechatWriteSuccess(PrintWriter printWriter) { printWriter.print("success"); printWriter.flush(); printWriter.close(); } + /** + * 新关注消息处理 + * @param appId + * @param inMessage + * @param authorizerInfo + */ + private void handleEventSubscribe(String appId, WxMpXmlMessage inMessage, WxAuthorizerInfo authorizerInfo) { + this.logger.info("新关注用户 OPENID: " + inMessage.getFromUser() + ", AppId: " + appId); + + // 获取微信用户基本信息 + try { + WxMpUser userWxInfo = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getUserService() + .userInfo(inMessage.getFromUser()); + if (userWxInfo != null) { + this.logger.info(userWxInfo.toString()); + userService.saveOrUpdateMpUser(userWxInfo, authorizerInfo); + } + } catch (WxErrorException e) { + if (e.getError().getErrorCode() == 48001) { + this.logger.info("该公众号没有获取用户信息权限!"); + } + } + } + + + /** + * 取消关注消息处理 + * @param appId + * @param inMessage + * @param authorizerInfo + */ + private void handleEventUnsubscribe(String appId, WxMpXmlMessage inMessage, WxAuthorizerInfo authorizerInfo) { + String openId = inMessage.getFromUser(); + this.logger.info("取消关注用户 OPENID: " + openId + ", AppId: " + appId); + + WxMpUser mpUser = new WxMpUser(); + mpUser.setOpenId(inMessage.getFromUser()); + mpUser.setSubscribe(false); + mpUser.setSubscribeTime(inMessage.getCreateTime()); + + userService.saveOrUpdateMpUser(mpUser, authorizerInfo); + } + + /** + * 测试账号特殊处理 + * @param appId + * @param response + * @param inMessage + * @throws IOException + */ + private void handleWechatTest(@PathVariable("appId") String appId, HttpServletResponse response, WxMpXmlMessage inMessage) throws IOException { + String out; + try { + if (StringUtils.equals(inMessage.getMsgType(), "text")) { + if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) { + out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml( + WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback") + .fromUser(inMessage.getToUser()) + .toUser(inMessage.getFromUser()) + .build(), + openService.getWxOpenConfigStorage() + ); + } else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) { + String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api"; + WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build(); + openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage); + } + } else if (StringUtils.equals(inMessage.getMsgType(), "event")) { + WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build(); + openService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage); + } + } catch (WxErrorException e) { + logger.error("callback", e); + } + } + + private String getRequestXML(HttpServletRequest request) throws IOException { + InputStream inStream = request.getInputStream(); + ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = inStream.read(buffer)) != -1) { + outSteam.write(buffer, 0, len); + } + String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); + logger.info(resultxml); + + outSteam.close(); + inStream.close(); + return resultxml; + } + private void getThreadCount( int i) { ThreadGroup group = Thread.currentThread().getThreadGroup(); ThreadGroup topGroup = group; @@ -326,8 +437,6 @@ public class WechatCalllbackController extends BaseController { } private void updateAuditStatus(String appId, boolean success, String reason) { - - WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); if (auditStatus != null) { if (success) { From 2e5018dc1a0fe6304737966b9515758f8c1f9614 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 18:04:41 +0800 Subject: [PATCH 18/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E9=99=90=E5=AE=9A=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/config/AsyncConfig.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java diff --git a/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java new file mode 100644 index 0000000..10a93a9 --- /dev/null +++ b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java @@ -0,0 +1,56 @@ +package com.iformall.config; + + +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Method; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +@Component +public class AsyncConfig implements AsyncConfigurer { + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Value("${thread.pool.corePoolSize:10}") + private int corePoolSize; + + @Value("${thread.pool.maxPoolSize:20}") + private int maxPoolSize; + + @Value("${thread.pool.keepAliveSeconds:4}") + private int keepAliveSeconds; + + @Value("${thread.pool.queueCapacity:512}") + private int queueCapacity; + + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(corePoolSize); + executor.setMaxPoolSize(maxPoolSize); + executor.setKeepAliveSeconds(keepAliveSeconds); + executor.setQueueCapacity(queueCapacity); + executor.setRejectedExecutionHandler((Runnable r, ThreadPoolExecutor exe) -> { + logger.warn("当前任务线程池队列已满."); + }); + executor.initialize(); + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return new AsyncUncaughtExceptionHandler() { + @Override + public void handleUncaughtException(Throwable ex, Method method, Object... params) { + logger.error("线程池执行任务发生未知异常.", ex); + } + }; + } +} From 66a7de85fa45097977ae2bfd7b44f71ea6bf0172 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 18:13:38 +0800 Subject: [PATCH 19/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E9=99=90=E5=AE=9A=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/iformall/config/AsyncConfig.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java index 10a93a9..c0144cf 100644 --- a/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java +++ b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java @@ -3,9 +3,10 @@ package com.iformall.config; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.stereotype.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,7 +15,8 @@ import java.lang.reflect.Method; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; -@Component +@Configuration +@EnableAsync public class AsyncConfig implements AsyncConfigurer { private Logger logger = LoggerFactory.getLogger(getClass()); From 0befac19ef80e3589d5be371d95f89c734835a6d Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 18:14:07 +0800 Subject: [PATCH 20/20] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E9=99=90=E5=AE=9A=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java index c0144cf..f41fec6 100644 --- a/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java +++ b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java @@ -43,6 +43,7 @@ public class AsyncConfig implements AsyncConfigurer { logger.warn("当前任务线程池队列已满."); }); executor.initialize(); + logger.info("限定线程池大小"); return executor; }