| @@ -1,71 +0,0 @@ | |||||
| package me.chanjar.weixin.mp.demo; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.common.session.WxSession; | |||||
| import me.chanjar.weixin.common.session.WxSessionManager; | |||||
| import me.chanjar.weixin.mp.api.WxMpMessageHandler; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | |||||
| import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | |||||
| import java.util.Map; | |||||
| public class DemoCheckAnswerHandler implements WxMpMessageHandler { | |||||
| @Override | |||||
| public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, | |||||
| WxSessionManager sessionManager) { | |||||
| WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); | |||||
| if (session.getAttribute("guessing") == null) { | |||||
| return null; | |||||
| } | |||||
| boolean guessing = (Boolean) session.getAttribute("guessing"); | |||||
| if (!guessing) { | |||||
| return null; | |||||
| } | |||||
| int answer = (Integer) session.getAttribute("number"); | |||||
| int guessNumber = Integer.valueOf(wxMessage.getContent()); | |||||
| if (guessNumber < answer) { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("小了") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } else if (guessNumber > answer) { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("大了") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } else { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("Bingo!") | |||||
| .build(); | |||||
| try { | |||||
| session.removeAttribute("guessing"); | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| return null; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,135 @@ | |||||
| package me.chanjar.weixin.mp.demo; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.common.session.WxSession; | |||||
| import me.chanjar.weixin.common.session.WxSessionManager; | |||||
| import me.chanjar.weixin.mp.api.WxMpMessageHandler; | |||||
| import me.chanjar.weixin.mp.api.WxMpMessageMatcher; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | |||||
| import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | |||||
| import java.util.Map; | |||||
| import java.util.Random; | |||||
| import java.util.regex.Pattern; | |||||
| public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMatcher { | |||||
| private Random random = new Random(); | |||||
| private Pattern pattern = Pattern.compile("\\d+"); | |||||
| @Override | |||||
| public boolean match(WxMpXmlMessage message) { | |||||
| return isUserWantGuess(message) || isUserAnswering(message); | |||||
| } | |||||
| private boolean isUserWantGuess(WxMpXmlMessage message) { | |||||
| return "猜数字".equals(message.getContent()); | |||||
| } | |||||
| private boolean isUserAnswering(WxMpXmlMessage message) { | |||||
| return pattern.matcher(message.getContent()).matches(); | |||||
| } | |||||
| @Override | |||||
| public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, | |||||
| WxSessionManager sessionManager) { | |||||
| if (isUserWantGuess(wxMessage)) { | |||||
| letsGo(wxMessage, wxMpService, sessionManager); | |||||
| } | |||||
| if (isUserAnswering(wxMessage)) { | |||||
| giveHint(wxMessage, wxMpService, sessionManager); | |||||
| } | |||||
| return null; | |||||
| } | |||||
| protected void letsGo(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) { | |||||
| WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); | |||||
| if (session.getAttribute("guessing") == null) { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("请猜一个100以内的数字") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } else { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("放弃了吗?那请重新猜一个100以内的数字") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| session.setAttribute("guessing", Boolean.TRUE); | |||||
| session.setAttribute("number", random.nextInt(100)); | |||||
| } | |||||
| protected void giveHint(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) { | |||||
| WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); | |||||
| if (session.getAttribute("guessing") == null) { | |||||
| return; | |||||
| } | |||||
| boolean guessing = (Boolean) session.getAttribute("guessing"); | |||||
| if (!guessing) { | |||||
| return; | |||||
| } | |||||
| int answer = (Integer) session.getAttribute("number"); | |||||
| int guessNumber = Integer.valueOf(wxMessage.getContent()); | |||||
| if (guessNumber < answer) { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("小了") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } else if (guessNumber > answer) { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("大了") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } else { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("Bingo!") | |||||
| .build(); | |||||
| try { | |||||
| session.removeAttribute("guessing"); | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,54 +0,0 @@ | |||||
| package me.chanjar.weixin.mp.demo; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.common.session.WxSession; | |||||
| import me.chanjar.weixin.common.session.WxSessionManager; | |||||
| import me.chanjar.weixin.mp.api.WxMpMessageHandler; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | |||||
| import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | |||||
| import java.util.Map; | |||||
| import java.util.Random; | |||||
| public class DemoStartGuessNumberHandler implements WxMpMessageHandler { | |||||
| private Random random = new Random(); | |||||
| @Override | |||||
| public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, | |||||
| WxSessionManager sessionManager) { | |||||
| WxSession session = sessionManager.getSession(wxMessage.getFromUserName()); | |||||
| if (session.getAttribute("guessing") == null) { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("请猜一个100以内的数字") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } else { | |||||
| WxMpCustomMessage m = WxMpCustomMessage | |||||
| .TEXT() | |||||
| .toUser(wxMessage.getFromUserName()) | |||||
| .content("放弃了吗?那请重新猜一个100以内的数字") | |||||
| .build(); | |||||
| try { | |||||
| wxMpService.customMessageSend(m); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| session.setAttribute("guessing", Boolean.TRUE); | |||||
| session.setAttribute("number", random.nextInt(100)); | |||||
| return null; | |||||
| } | |||||
| } | |||||
| @@ -44,14 +44,12 @@ public class WxMpDemoServer { | |||||
| WxMpMessageHandler textHandler = new DemoTextHandler(); | WxMpMessageHandler textHandler = new DemoTextHandler(); | ||||
| WxMpMessageHandler imageHandler = new DemoImageHandler(); | WxMpMessageHandler imageHandler = new DemoImageHandler(); | ||||
| WxMpMessageHandler oauth2handler = new DemoOAuth2Handler(); | WxMpMessageHandler oauth2handler = new DemoOAuth2Handler(); | ||||
| WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler(); | |||||
| DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler(); | |||||
| DemoGuessNumberHandler guessNumberHandler = new DemoGuessNumberHandler(); | |||||
| wxMpMessageRouter = new WxMpMessageRouter(wxMpService); | wxMpMessageRouter = new WxMpMessageRouter(wxMpService); | ||||
| wxMpMessageRouter | wxMpMessageRouter | ||||
| .rule().handler(logHandler).next() | .rule().handler(logHandler).next() | ||||
| .rule().msgType(WxConsts.XML_MSG_TEXT).content("猜数字").handler(startGuessNumberHandler).next() | |||||
| .rule().msgType(WxConsts.XML_MSG_TEXT).rContent("\\d+").handler(checkAnswerHandler).end() | |||||
| .rule().msgType(WxConsts.XML_MSG_TEXT).matcher(guessNumberHandler).handler(guessNumberHandler).end() | |||||
| .rule().async(false).content("哈哈").handler(textHandler).end() | .rule().async(false).content("哈哈").handler(textHandler).end() | ||||
| .rule().async(false).content("图片").handler(imageHandler).end() | .rule().async(false).content("图片").handler(imageHandler).end() | ||||
| .rule().async(false).content("oauth").handler(oauth2handler).end() | .rule().async(false).content("oauth").handler(oauth2handler).end() | ||||