mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-11-04 06:07:59 +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