From b12f001815ce7f022e5b07fcd70a13f68cc36af5 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 23:43:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[event=E5=A4=84=E7=90=86][=E4=BF=AE?= =?UTF-8?q?=E6=94=B9]:=E5=86=8D=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/WxAuthorizerInfoMapper.java | 2 + .../service/wechat/FmOpenService.java | 110 +++++++++++++++++- .../wechat/builder/AbstractBuilder.java | 17 +++ .../service/wechat/builder/ImageBuilder.java | 24 ++++ .../service/wechat/builder/TextBuilder.java | 25 ++++ .../wechat}/handler/AbstractHandler.java | 2 +- .../wechat}/handler/KfSessionHandler.java | 3 +- .../wechat}/handler/LocationHandler.java | 4 +- .../service/wechat}/handler/LogHandler.java | 4 +- .../service/wechat}/handler/MenuHandler.java | 3 +- .../service/wechat}/handler/MsgHandler.java | 4 +- .../service/wechat}/handler/NullHandler.java | 2 +- .../service/wechat}/handler/ScanHandler.java | 4 +- .../handler/StoreCheckNotifyHandler.java | 3 +- .../wechat}/handler/SubscribeHandler.java | 7 +- .../wechat}/handler/UnsubscribeHandler.java | 3 +- .../wechat/handler/WeappAuditHandler.java | 104 +++++++++++++++++ .../service/wechat}/utils/JsonUtils.java | 2 +- .../mapper/WxAuthorizerInfoMapper.xml | 7 ++ .../controller/WechatCalllbackController.java | 9 +- .../com/iformall/mp/manager/WxMpManager.java | 2 +- 21 files changed, 321 insertions(+), 20 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/wechat/builder/AbstractBuilder.java create mode 100644 mallinkService/src/main/java/com/iformall/service/wechat/builder/ImageBuilder.java create mode 100644 mallinkService/src/main/java/com/iformall/service/wechat/builder/TextBuilder.java rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/AbstractHandler.java (87%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/KfSessionHandler.java (87%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/LocationHandler.java (93%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/LogHandler.java (88%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/MenuHandler.java (91%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/MsgHandler.java (94%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/NullHandler.java (93%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/ScanHandler.java (54%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/StoreCheckNotifyHandler.java (88%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/SubscribeHandler.java (95%) rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/handler/UnsubscribeHandler.java (94%) create mode 100644 mallinkService/src/main/java/com/iformall/service/wechat/handler/WeappAuditHandler.java rename {mlWechatOpen/src/main/java/com/iformall/mp => mallinkService/src/main/java/com/iformall/service/wechat}/utils/JsonUtils.java (88%) diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java index ffe24d6..a33fcfe 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java @@ -13,6 +13,8 @@ public interface WxAuthorizerInfoMapper extends CommonMapper { - logger.info("\n接收到 {} 公众号请求消息,内容:{}", wxMpService.getWxMpConfigStorage().getAppId(), wxMpXmlMessage); + String appId = wxMpService.getWxMpConfigStorage().getAppId(); + WxAuthorizerInfo authorizerInfo = authorizerInfoMapper.findByAppid(appId); + String appType; + if(authorizerInfo.getType() <= EnumAppType.C.getCode()) { + appType = "小程序"; + } else { + appType = "公众号"; + } + logger.info("\n接收到{}{}请求消息,内容:{}", appId, appType, wxMpXmlMessage); return null; }).next(); + + // 接收客服会话管理事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.CustomerService.KF_CREATE_SESSION) + .handler(this.kfSessionHandler).end(); + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.CustomerService.KF_CLOSE_SESSION) + .handler(this.kfSessionHandler).end(); + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.CustomerService.KF_SWITCH_SESSION) + .handler(this.kfSessionHandler).end(); + + // 门店审核事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.POI_CHECK_NOTIFY) + .handler(this.storeCheckNotifyHandler).end(); + + // 自定义菜单事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.MenuButtonType.CLICK) + .handler(this.menuHandler).end(); + + // 点击菜单连接事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.MenuButtonType.VIEW) + .handler(this.nullHandler).end(); + + // 关注事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.SUBSCRIBE) + .handler(this.subscribeHandler).end(); + + // 取消关注事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.UNSUBSCRIBE) + .handler(this.unsubscribeHandler).end(); + + // 上报地理位置事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.LOCATION) + .handler(this.locationHandler).end(); + + // 接收地理位置消息 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.LOCATION) + .handler(this.locationHandler).end(); + + // 扫码事件 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.SCAN) + .handler(this.nullHandler).end(); + + // 小程序 审核通过 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.WEAPP_AUDIT_SUCCESS) + .handler(this.weappAuditHandler).end(); + // 小程序 审核失败 + wxOpenMessageRouter.rule().async(false) + .msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.WEAPP_AUDIT_FAIL) + .handler(this.weappAuditHandler).end(); + + // 默认 + wxOpenMessageRouter.rule().async(false).handler(this.msgHandler).end(); } public WxOpenMessageRouter getWxOpenMessageRouter() { diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/builder/AbstractBuilder.java b/mallinkService/src/main/java/com/iformall/service/wechat/builder/AbstractBuilder.java new file mode 100644 index 0000000..0ae7f9f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/wechat/builder/AbstractBuilder.java @@ -0,0 +1,17 @@ +package com.iformall.service.wechat.builder; + +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Stormeye + */ +public abstract class AbstractBuilder { + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + public abstract WxMpXmlOutMessage build(String content, + WxMpXmlMessage wxMessage, WxMpService service); +} diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/builder/ImageBuilder.java b/mallinkService/src/main/java/com/iformall/service/wechat/builder/ImageBuilder.java new file mode 100644 index 0000000..3e5113c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/wechat/builder/ImageBuilder.java @@ -0,0 +1,24 @@ +package com.iformall.service.wechat.builder; + +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; + +/** + * @author Binary Wang(https://github.com/binarywang) + */ +public class ImageBuilder extends AbstractBuilder { + + @Override + public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage, + WxMpService service) { + + WxMpXmlOutImageMessage m = WxMpXmlOutMessage.IMAGE().mediaId(content) + .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) + .build(); + + return m; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/builder/TextBuilder.java b/mallinkService/src/main/java/com/iformall/service/wechat/builder/TextBuilder.java new file mode 100644 index 0000000..c0d7f47 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/wechat/builder/TextBuilder.java @@ -0,0 +1,25 @@ +package com.iformall.service.wechat.builder; + +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Binary Wang(https://github.com/binarywang) + */ +public class TextBuilder extends AbstractBuilder { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage, + WxMpService service) { + WxMpXmlOutTextMessage m = WxMpXmlOutMessage.TEXT().content(content) + .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) + .build(); + return m; + } + +} diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/AbstractHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/AbstractHandler.java similarity index 87% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/AbstractHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/AbstractHandler.java index ee1f64b..b3538c3 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/AbstractHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/AbstractHandler.java @@ -1,4 +1,4 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; import me.chanjar.weixin.mp.api.WxMpMessageHandler; import org.slf4j.Logger; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/KfSessionHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/KfSessionHandler.java similarity index 87% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/KfSessionHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/KfSessionHandler.java index df34455..9b0cc04 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/KfSessionHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/KfSessionHandler.java @@ -1,5 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; +import com.iformall.service.wechat.handler.AbstractHandler; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/LocationHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/LocationHandler.java similarity index 93% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/LocationHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/LocationHandler.java index 2b96ade..66448a5 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/LocationHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/LocationHandler.java @@ -1,6 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; -import com.iformall.mp.builder.TextBuilder; +import com.iformall.service.wechat.builder.TextBuilder; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/LogHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/LogHandler.java similarity index 88% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/LogHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/LogHandler.java index 794e6f9..e5db3c1 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/LogHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/LogHandler.java @@ -1,6 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; -import com.iformall.mp.utils.JsonUtils; +import com.iformall.service.wechat.utils.JsonUtils; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/MenuHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/MenuHandler.java similarity index 91% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/MenuHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/MenuHandler.java index 880c94e..770bd55 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/MenuHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/MenuHandler.java @@ -1,5 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; +import com.iformall.service.wechat.handler.AbstractHandler; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/MsgHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/MsgHandler.java similarity index 94% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/MsgHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/MsgHandler.java index e775e1d..6e1a31b 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/MsgHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/MsgHandler.java @@ -1,6 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; -import com.iformall.mp.builder.TextBuilder; +import com.iformall.service.wechat.builder.TextBuilder; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/NullHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/NullHandler.java similarity index 93% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/NullHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/NullHandler.java index ea8d029..fc2482a 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/NullHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/NullHandler.java @@ -1,4 +1,4 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/ScanHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/ScanHandler.java similarity index 54% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/ScanHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/ScanHandler.java index 251c47b..77763d1 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/ScanHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/ScanHandler.java @@ -1,4 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; + +import com.iformall.service.wechat.handler.AbstractHandler; /** * @author Binary Wang(https://github.com/binarywang) diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/StoreCheckNotifyHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/StoreCheckNotifyHandler.java similarity index 88% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/StoreCheckNotifyHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/StoreCheckNotifyHandler.java index 4bee501..289c033 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/StoreCheckNotifyHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/StoreCheckNotifyHandler.java @@ -1,5 +1,6 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; +import com.iformall.service.wechat.handler.AbstractHandler; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java similarity index 95% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java index b763d4f..43ca420 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/SubscribeHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java @@ -1,9 +1,9 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.mapper.WxAuthorizerInfoMapper; -import com.iformall.mp.builder.TextBuilder; import com.iformall.service.WxCUserService; +import com.iformall.service.wechat.handler.AbstractHandler; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; @@ -53,7 +53,7 @@ public class SubscribeHandler extends AbstractHandler { } } - + /* WxMpXmlOutMessage responseResult = null; try { responseResult = this.handleSpecial(wxMessage); @@ -70,6 +70,7 @@ public class SubscribeHandler extends AbstractHandler { } catch (Exception e) { this.logger.error(e.getMessage(), e); } + */ return null; } diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java similarity index 94% rename from mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java rename to mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java index b9202e9..a16c922 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java @@ -1,8 +1,9 @@ -package com.iformall.mp.handler; +package com.iformall.service.wechat.handler; import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.mapper.WxAuthorizerInfoMapper; import com.iformall.service.WxCUserService; +import com.iformall.service.wechat.handler.AbstractHandler; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/handler/WeappAuditHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/WeappAuditHandler.java new file mode 100644 index 0000000..e98c9bc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/WeappAuditHandler.java @@ -0,0 +1,104 @@ +package com.iformall.service.wechat.handler; + +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxWeappAuditStatus; +import com.iformall.enums.EnumAppType; +import com.iformall.enums.EnumWeappAuditStatus; +import com.iformall.service.MailService; +import com.iformall.service.WxAppinfoService; +import com.iformall.service.WxWeappAuditStatusService; +import me.chanjar.weixin.common.api.WxConsts; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +/** + * @author Binary Wang(https://github.com/binarywang) + */ +@Component +public class WeappAuditHandler extends AbstractHandler { + + @Autowired + private WxWeappAuditStatusService weappAuditStatusService; + + @Autowired + private WxAppinfoService appinfoService; + + @Autowired + private String fmAuditEmails; + + @Autowired + private MailService mailService; + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + String appId = wxMpService.getWxMpConfigStorage().getAppId(); + if(wxMessage.getEvent().equalsIgnoreCase(WxConsts.EventType.WEAPP_AUDIT_SUCCESS)) { + updateAuditStatus(appId, true, null); + } else if(wxMessage.getEvent().equalsIgnoreCase(WxConsts.EventType.WEAPP_AUDIT_SUCCESS)) { + updateAuditStatus(appId, false, wxMessage.getReason()); + } + return null; + } + + private void updateAuditStatus(String appId, boolean success, String reason) { + WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); + if (auditStatus != null) { + if (success) { + auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode()); + auditStatus.setAuditErrCode(""); + } else { + auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode()); + auditStatus.setAuditErrCode(reason); + } + auditStatus.setAuditTime(new Date()); + weappAuditStatusService.updateStatus(auditStatus); + } + + // 发邮件 + WxAppinfo appinfo = appinfoService.getByAppId(appId); + if (appinfo != null) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 + + StringBuilder titleSB = new StringBuilder(); + if (appinfo.getType().equals(EnumAppType.C.getCode())) { + titleSB.append("C端小程序"); + } else if (appinfo.getType().equals(EnumAppType.B.getCode())) { + titleSB.append("B端小程序"); + } else if (appinfo.getType().equals(EnumAppType.MP_S.getCode())) { + titleSB.append("公众号-服务号"); + } else if (appinfo.getType().equals(EnumAppType.MP_P.getCode())) { + titleSB.append("公众号-订阅号"); + } + titleSB.append(appinfo.getName()); + if (success) { + titleSB.append("审核通过"); + } else { + titleSB.append("审核未通过"); + } + + StringBuilder sb = new StringBuilder(); + sb.append(df.format(new Date())).append("\n"); + if (success) { + sb.append("审核通过\n"); + } else { + sb.append("审核未通过\n").append("原因").append(reason); + } + + String[] receivers = fmAuditEmails.split(","); + + //发送邮件 + mailService.sendSimpleMail(receivers, titleSB.toString(), sb.toString()); + } + } + +} diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/utils/JsonUtils.java b/mallinkService/src/main/java/com/iformall/service/wechat/utils/JsonUtils.java similarity index 88% rename from mlWechatOpen/src/main/java/com/iformall/mp/utils/JsonUtils.java rename to mallinkService/src/main/java/com/iformall/service/wechat/utils/JsonUtils.java index 11918ee..ee16354 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/utils/JsonUtils.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/utils/JsonUtils.java @@ -1,4 +1,4 @@ -package com.iformall.mp.utils; +package com.iformall.service.wechat.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml index e5b181b..29d06fe 100644 --- a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml @@ -162,6 +162,13 @@ where `authorizer_appid` = #{authorizerAppid} + + diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 7a6fdcf..5faa1bc 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -219,7 +219,14 @@ public class WechatCalllbackController extends BaseController { } // 实际 消息 处理 - handleCallbackMessage(appId, response, inMessage); + //handleCallbackMessage(appId, response, inMessage); + WxMpXmlOutMessage outMessage = openService.getWxOpenMessageRouter().route(inMessage, appId); + if(outMessage == null) { + PrintWriter printWriter = response.getWriter(); + wechatWriteSuccess(printWriter); + } + PrintWriter printWriter = response.getWriter(); + wechatWriteSuccess(printWriter); } /** 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 bbcdf70..7de9728 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,7 @@ package com.iformall.mp.manager; -import com.iformall.mp.handler.*; import com.iformall.service.wechat.FmOpenService; +import com.iformall.service.wechat.handler.*; import me.chanjar.weixin.mp.api.WxMpMessageRouter; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.constant.WxMpEventConstants; From 3d59a82bc8a600cf7817481b1b73d3ca50955811 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Fri, 26 Apr 2019 00:00:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[event=E5=A4=84=E7=90=86][=E4=BF=AE?= =?UTF-8?q?=E6=94=B9]:=E5=86=8D=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wechat/handler/SubscribeHandler.java | 6 +- .../wechat/handler/UnsubscribeHandler.java | 5 +- .../controller/WechatCalllbackController.java | 215 ------------------ 3 files changed, 7 insertions(+), 219 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java index 43ca420..0425ef0 100644 --- a/mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/SubscribeHandler.java @@ -39,10 +39,13 @@ public class SubscribeHandler extends AbstractHandler { authQ.setAuthorizerAppid(appId); WxAuthorizerInfo authorizerInfo = wxAuthorizerInfoMapper.findWeChatMp(authQ); + if(authorizerInfo == null) { + return null; + } // 获取微信用户基本信息 try { WxMpUser userWxInfo = weixinService.getUserService() - .userInfo(wxMessage.getFromUser()); + .userInfo(wxMessage.getFromUser()); if (userWxInfo != null) { this.logger.info(userWxInfo.toString()); userService.saveOrUpdateMpUser(userWxInfo, authorizerInfo); @@ -52,7 +55,6 @@ public class SubscribeHandler extends AbstractHandler { this.logger.info("该公众号没有获取用户信息权限!"); } } - /* WxMpXmlOutMessage responseResult = null; try { diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java b/mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java index a16c922..c700722 100644 --- a/mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/handler/UnsubscribeHandler.java @@ -37,14 +37,15 @@ public class UnsubscribeHandler extends AbstractHandler { WxAuthorizerInfo authQ = new WxAuthorizerInfo(); authQ.setAuthorizerAppid(appId); WxAuthorizerInfo authorizerInfo = wxAuthorizerInfoMapper.findWeChatMp(authQ); - + if(authorizerInfo == null) { + return null; + } WxMpUser mpUser = new WxMpUser(); mpUser.setOpenId(wxMessage.getFromUser()); mpUser.setSubscribe(false); mpUser.setSubscribeTime(wxMessage.getCreateTime()); userService.saveOrUpdateMpUser(mpUser, authorizerInfo); - return null; } diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 5faa1bc..8987ab4 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -6,7 +6,6 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.enums.*; -import com.iformall.mp.manager.WxMpManager; import com.iformall.service.*; import com.iformall.service.wechat.FmOpenService; import io.swagger.annotations.Api; @@ -15,7 +14,6 @@ import me.chanjar.weixin.common.error.WxErrorException; 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; @@ -35,7 +33,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.nio.charset.Charset; -import java.text.SimpleDateFormat; import java.util.Date; @Controller @@ -44,9 +41,6 @@ import java.util.Date; public class WechatCalllbackController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private String fmAuditEmails; - @Autowired protected FmOpenService openService; @@ -56,21 +50,6 @@ public class WechatCalllbackController extends BaseController { @Autowired private WxAuthorizerInfoService authorizerInfoService; - @Autowired - private WxWeappAuditStatusService weappAuditStatusService; - - @Autowired - private WxAppinfoService appinfoService; - - @Autowired - private WxCUserService userService; - - @Autowired - private MailService mailService; - - @Autowired - private WxMpManager mpManager; - @PostMapping(value = "/notify") @ApiOperation("接收ticket回调") @ResponseBody @@ -229,156 +208,12 @@ public class WechatCalllbackController extends BaseController { wechatWriteSuccess(printWriter); } - /** - * 实际回调消息处理 - * @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() <= EnumAppType.C.getCode())) { - /**判断消息类型,调用对应的方法*/ - handleWeappCallbackMessage(appId, inMessage); - wechatWriteSuccess(printWriter); - return; - } else { - 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"); - wechatWriteSuccess(printWriter); - return; - } - // logger.info("组装回复" + outMessage.toXml()); - // out = outMessage.toEncryptedXml(mpService.getWxMpConfigStorage()); - // logger.info("组装回复消息-->"+out); - } 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 @@ -443,56 +278,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) { - auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode()); - auditStatus.setAuditErrCode(""); - } else { - auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode()); - auditStatus.setAuditErrCode(reason); - } - auditStatus.setAuditTime(new Date()); - weappAuditStatusService.updateStatus(auditStatus); - } - - // 发邮件 - WxAppinfo appinfo = appinfoService.getByAppId(appId); - if (appinfo != null) { - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 - - StringBuilder titleSB = new StringBuilder(); - if (appinfo.getType().equals(EnumAppType.C.getCode())) { - titleSB.append("C端小程序"); - } else if (appinfo.getType().equals(EnumAppType.B.getCode())) { - titleSB.append("B端小程序"); - } else if (appinfo.getType().equals(EnumAppType.MP_S.getCode())) { - titleSB.append("公众号-服务号"); - } else if (appinfo.getType().equals(EnumAppType.MP_P.getCode())) { - titleSB.append("公众号-订阅号"); - } - titleSB.append(appinfo.getName()); - if (success) { - titleSB.append("审核通过"); - } else { - titleSB.append("审核未通过"); - } - - StringBuilder sb = new StringBuilder(); - sb.append(df.format(new Date())).append("\n"); - if (success) { - sb.append("审核通过\n"); - } else { - sb.append("审核未通过\n").append("原因").append(reason); - } - - String[] receivers = fmAuditEmails.split(","); - - //发送邮件 - mailService.sendSimpleMail(receivers, titleSB.toString(), sb.toString()); - } - } @GetMapping(value = "/createOpenPlatform") @ApiOperation("创建微信开放平台")