mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 18:46:10 +08:00 
			
		
		
		
	添加猜数字游戏的demo
This commit is contained in:
		| @ -0,0 +1,71 @@ | ||||
| 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,38 @@ | ||||
| package me.chanjar.weixin.mp.demo; | ||||
|  | ||||
| import me.chanjar.weixin.common.api.WxConsts; | ||||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| 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.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutImageMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.Map; | ||||
|  | ||||
| public class DemoImageHandler implements WxMpMessageHandler { | ||||
|   @Override | ||||
|   public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, | ||||
|       WxMpService wxMpService, WxSessionManager sessionManager) { | ||||
|     try { | ||||
|       WxMediaUploadResult wxMediaUploadResult = wxMpService | ||||
|           .mediaUpload(WxConsts.MEDIA_IMAGE, WxConsts.FILE_JPG, ClassLoader.getSystemResourceAsStream("mm.jpeg")); | ||||
|       WxMpXmlOutImageMessage m | ||||
|           = WxMpXmlOutMessage | ||||
|           .IMAGE() | ||||
|           .mediaId(wxMediaUploadResult.getMediaId()) | ||||
|           .fromUser(wxMessage.getToUserName()) | ||||
|           .toUser(wxMessage.getFromUserName()) | ||||
|           .build(); | ||||
|       return m; | ||||
|     } catch (WxErrorException e) { | ||||
|       e.printStackTrace(); | ||||
|     } catch (IOException e) { | ||||
|       e.printStackTrace(); | ||||
|     } | ||||
|     return null; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,21 @@ | ||||
| package me.chanjar.weixin.mp.demo; | ||||
|  | ||||
| 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.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Created by qianjia on 15/1/22. | ||||
|  */ | ||||
| public class DemoLogHandler implements WxMpMessageHandler { | ||||
|   @Override | ||||
|   public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, | ||||
|       WxSessionManager sessionManager) { | ||||
|     System.out.println(wxMessage.toString()); | ||||
|     return null; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,27 @@ | ||||
| package me.chanjar.weixin.mp.demo; | ||||
|  | ||||
| import me.chanjar.weixin.common.api.WxConsts; | ||||
| 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.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Created by qianjia on 15/1/22. | ||||
|  */ | ||||
| public class DemoOAuth2Handler implements WxMpMessageHandler { | ||||
|   @Override | ||||
|   public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, | ||||
|       WxMpService wxMpService, WxSessionManager sessionManager) { | ||||
|     String href = "<a href=\"" + wxMpService.oauth2buildAuthorizationUrl(WxConsts.OAUTH2_SCOPE_USER_INFO, null) | ||||
|         + "\">测试oauth2</a>"; | ||||
|     return WxMpXmlOutMessage | ||||
|         .TEXT() | ||||
|         .content(href) | ||||
|         .fromUser(wxMessage.getToUserName()) | ||||
|         .toUser(wxMessage.getFromUserName()).build(); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,54 @@ | ||||
| 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; | ||||
|  | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,25 @@ | ||||
| package me.chanjar.weixin.mp.demo; | ||||
|  | ||||
| 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.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Created by qianjia on 15/1/22. | ||||
|  */ | ||||
| public class DemoTextHandler implements WxMpMessageHandler { | ||||
|   @Override | ||||
|   public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, | ||||
|       WxMpService wxMpService, WxSessionManager sessionManager) { | ||||
|     WxMpXmlOutTextMessage m | ||||
|         = WxMpXmlOutMessage.TEXT().content("测试加密消息").fromUser(wxMessage.getToUserName()) | ||||
|         .toUser(wxMessage.getFromUserName()).build(); | ||||
|     return m; | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -1,21 +1,12 @@ | ||||
| package me.chanjar.weixin.mp.demo; | ||||
|  | ||||
| import me.chanjar.weixin.common.api.WxConsts; | ||||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.session.WxSessionManager; | ||||
| import me.chanjar.weixin.mp.api.*; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutImageMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage; | ||||
| import org.eclipse.jetty.server.Server; | ||||
| import org.eclipse.jetty.servlet.ServletHandler; | ||||
| import org.eclipse.jetty.servlet.ServletHolder; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.util.Map; | ||||
|  | ||||
| public class WxMpDemoServer { | ||||
|  | ||||
| @ -42,79 +33,28 @@ public class WxMpDemoServer { | ||||
|   } | ||||
|  | ||||
|   private static void initWeixin() { | ||||
|       InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml"); | ||||
|       WxMpDemoInMemoryConfigStorage config = WxMpDemoInMemoryConfigStorage.fromXml(is1); | ||||
|     InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml"); | ||||
|     WxMpDemoInMemoryConfigStorage config = WxMpDemoInMemoryConfigStorage.fromXml(is1); | ||||
|  | ||||
|       wxMpConfigStorage = config; | ||||
|       wxMpService = new WxMpServiceImpl(); | ||||
|       wxMpService.setWxMpConfigStorage(config); | ||||
|     wxMpConfigStorage = config; | ||||
|     wxMpService = new WxMpServiceImpl(); | ||||
|     wxMpService.setWxMpConfigStorage(config); | ||||
|  | ||||
|       WxMpMessageHandler textHandler = new WxMpMessageHandler() { | ||||
|         @Override | ||||
|         public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, | ||||
|             WxMpService wxMpService, WxSessionManager sessionManager) { | ||||
|           WxMpXmlOutTextMessage m | ||||
|               = WxMpXmlOutMessage.TEXT().content("测试加密消息").fromUser(wxMessage.getToUserName()) | ||||
|               .toUser(wxMessage.getFromUserName()).build(); | ||||
|           return m; | ||||
|         } | ||||
|       }; | ||||
|     WxMpMessageHandler logHandler = new DemoLogHandler(); | ||||
|     WxMpMessageHandler textHandler = new DemoTextHandler(); | ||||
|     WxMpMessageHandler imageHandler = new DemoImageHandler(); | ||||
|     WxMpMessageHandler oauth2handler = new DemoOAuth2Handler(); | ||||
|     WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler(); | ||||
|     DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler(); | ||||
|  | ||||
|       WxMpMessageHandler imageHandler = new WxMpMessageHandler() { | ||||
|         @Override | ||||
|         public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, | ||||
|             WxMpService wxMpService, WxSessionManager sessionManager) { | ||||
|           try { | ||||
|             WxMediaUploadResult wxMediaUploadResult = wxMpService | ||||
|                 .mediaUpload(WxConsts.MEDIA_IMAGE, WxConsts.FILE_JPG, ClassLoader.getSystemResourceAsStream("mm.jpeg")); | ||||
|             WxMpXmlOutImageMessage m | ||||
|                 = WxMpXmlOutMessage | ||||
|                 .IMAGE() | ||||
|                 .mediaId(wxMediaUploadResult.getMediaId()) | ||||
|                 .fromUser(wxMessage.getToUserName()) | ||||
|                 .toUser(wxMessage.getFromUserName()) | ||||
|                 .build(); | ||||
|             return m; | ||||
|           } catch (WxErrorException e) { | ||||
|             e.printStackTrace(); | ||||
|           } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|           } | ||||
|           return null; | ||||
|         } | ||||
|       }; | ||||
|  | ||||
|       WxMpMessageHandler oauth2handler = new WxMpMessageHandler() { | ||||
|         @Override | ||||
|         public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, | ||||
|             WxMpService wxMpService, WxSessionManager sessionManager) { | ||||
|           String href = "<a href=\"" + wxMpService.oauth2buildAuthorizationUrl(WxConsts.OAUTH2_SCOPE_USER_INFO, null) | ||||
|               + "\">测试oauth2</a>"; | ||||
|           return WxMpXmlOutMessage | ||||
|               .TEXT() | ||||
|               .content(href) | ||||
|               .fromUser(wxMessage.getToUserName()) | ||||
|               .toUser(wxMessage.getFromUserName()).build(); | ||||
|         } | ||||
|       }; | ||||
|  | ||||
|       wxMpMessageRouter = new WxMpMessageRouter(wxMpService); | ||||
|     wxMpMessageRouter = new WxMpMessageRouter(wxMpService); | ||||
|       wxMpMessageRouter | ||||
|           .rule() | ||||
|           .async(false) | ||||
|           .content("哈哈") // 拦截内容为“哈哈”的消息 | ||||
|           .handler(textHandler) | ||||
|           .end() | ||||
|           .rule() | ||||
|           .async(false) | ||||
|           .content("图片") | ||||
|           .handler(imageHandler) | ||||
|           .end() | ||||
|           .rule() | ||||
|           .async(false) | ||||
|           .content("oauth") | ||||
|           .handler(oauth2handler) | ||||
|           .end() | ||||
|           .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().async(false).content("哈哈").handler(textHandler).end() | ||||
|           .rule().async(false).content("图片").handler(imageHandler).end() | ||||
|           .rule().async(false).content("oauth").handler(oauth2handler).end() | ||||
|       ; | ||||
|  | ||||
|   } | ||||
|  | ||||
| @ -60,7 +60,9 @@ public class WxMpEndpointServlet extends HttpServlet { | ||||
|       // 明文传输的消息 | ||||
|       WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream()); | ||||
|       WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage); | ||||
|       response.getWriter().write(outMessage.toXml()); | ||||
|       if (outMessage != null) { | ||||
|         response.getWriter().write(outMessage.toXml()); | ||||
|       } | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Daniel Qian
					Daniel Qian