From 79a41e96d1c5b4abf68c8d48ba25dee00db36ac6 Mon Sep 17 00:00:00 2001 From: BinaryWang Date: Thu, 7 Jul 2016 20:25:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/spring/handler/LogHandler.java | 38 +++++++++++++++++++ .../demo/spring/handler/MsgHandler.java | 6 +-- .../demo/spring/service/BaseWxService.java | 23 ++++++----- 3 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/LogHandler.java diff --git a/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/LogHandler.java b/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/LogHandler.java new file mode 100644 index 000000000..28aa264b6 --- /dev/null +++ b/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/LogHandler.java @@ -0,0 +1,38 @@ +package com.github.binarywang.demo.spring.handler; + +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import com.github.binarywang.demo.spring.config.WxConfig; + +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; + +/** + * + * @author Binary Wang + * + */ +@Component +public class LogHandler extends AbstractHandler { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + this.logger.info("接收到请求消息,内容:【{}】" ,wxMessage.toString()); + return null; + } + + @Override + protected WxConfig getWxConfig() { + return null; + } + +} diff --git a/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/MsgHandler.java b/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/MsgHandler.java index 47ad929f4..5984749ce 100644 --- a/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/MsgHandler.java +++ b/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/handler/MsgHandler.java @@ -31,9 +31,9 @@ public abstract class MsgHandler extends AbstractHandler { //TODO 可以选择将消息保存到本地 } - //当用户输入关键词如“你好”,“在吗”等并且有客服在线时,把消息转发给在线客服 - if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "在吗") - && weixinService.isCustomerServiceOnline()) { + //当用户输入关键词如“是”,“客服”等并且有客服在线时,把消息转发给在线客服 + if (StringUtils.startsWithAny(wxMessage.getContent(), "是","客服") + && weixinService.hasKefuOnline()) { return WxMpXmlOutMessage .TRANSFER_CUSTOMER_SERVICE().fromUser(wxMessage.getToUserName()) .toUser(wxMessage.getFromUserName()).build(); diff --git a/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/service/BaseWxService.java b/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/service/BaseWxService.java index a05abf8c9..29b319a97 100644 --- a/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/service/BaseWxService.java +++ b/weixin-java-demo-with-spring/src/main/java/com/github/binarywang/demo/spring/service/BaseWxService.java @@ -11,10 +11,9 @@ import com.github.binarywang.demo.spring.handler.AbstractHandler; import com.github.binarywang.demo.spring.handler.MenuHandler; import com.github.binarywang.demo.spring.handler.MsgHandler; import com.github.binarywang.demo.spring.handler.NullHandler; +import com.github.binarywang.demo.spring.handler.LogHandler; import com.github.binarywang.demo.spring.handler.SubscribeHandler; import com.github.binarywang.demo.spring.handler.UnsubscribeHandler; -import com.google.gson.JsonArray; -import com.google.gson.JsonParser; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; @@ -22,6 +21,7 @@ import me.chanjar.weixin.mp.api.WxMpMessageRouter; import me.chanjar.weixin.mp.api.WxMpServiceImpl; import me.chanjar.weixin.mp.bean.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.customerservice.result.WxMpKfOnlineList; /** * @@ -31,6 +31,9 @@ import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; public abstract class BaseWxService extends WxMpServiceImpl { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + protected LogHandler logHandler; + @Autowired protected NullHandler nullHandler; @@ -65,9 +68,12 @@ public abstract class BaseWxService extends WxMpServiceImpl { final WxMpMessageRouter newRouter = new WxMpMessageRouter(this); + //记录所有事件的日志 + newRouter.rule().handler(this.logHandler).next(); + // 自定义菜单事件 - newRouter.rule().async(false).event(WxConsts.BUTTON_CLICK) - .handler(this.getMenuHandler()).end(); + newRouter.rule().async(false).msgType(WxConsts.XML_MSG_EVENT) + .event(WxConsts.BUTTON_CLICK).handler(this.getMenuHandler()).end(); // 点击菜单连接事件 newRouter.rule().async(false).msgType(WxConsts.XML_MSG_EVENT) @@ -112,13 +118,10 @@ public abstract class BaseWxService extends WxMpServiceImpl { return null; } - public boolean isCustomerServiceOnline() { + public boolean hasKefuOnline() { try { - String url = "https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist"; - String executeResult = this.get(url, null); - JsonArray jsonArray = new JsonParser().parse(executeResult) - .getAsJsonObject().get("kf_online_list").getAsJsonArray(); - return jsonArray.size() > 0; + WxMpKfOnlineList kfOnlineList = this.getKefuService().kfOnlineList(); + return kfOnlineList != null && kfOnlineList.getKfOnlineList().size() > 0; } catch (Exception e) { this.logger.error("获取客服在线状态异常: " + e.getMessage(), e); }