mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-05-06 21:57:48 +08:00
添加猜数字游戏的demo
This commit is contained in:
parent
3fbb260bf7
commit
ffe63e71eb
@ -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;
|
package me.chanjar.weixin.mp.demo;
|
||||||
|
|
||||||
import me.chanjar.weixin.common.api.WxConsts;
|
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.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.server.Server;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class WxMpDemoServer {
|
public class WxMpDemoServer {
|
||||||
|
|
||||||
@ -42,79 +33,28 @@ public class WxMpDemoServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void initWeixin() {
|
private static void initWeixin() {
|
||||||
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml");
|
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml");
|
||||||
WxMpDemoInMemoryConfigStorage config = WxMpDemoInMemoryConfigStorage.fromXml(is1);
|
WxMpDemoInMemoryConfigStorage config = WxMpDemoInMemoryConfigStorage.fromXml(is1);
|
||||||
|
|
||||||
wxMpConfigStorage = config;
|
wxMpConfigStorage = config;
|
||||||
wxMpService = new WxMpServiceImpl();
|
wxMpService = new WxMpServiceImpl();
|
||||||
wxMpService.setWxMpConfigStorage(config);
|
wxMpService.setWxMpConfigStorage(config);
|
||||||
|
|
||||||
WxMpMessageHandler textHandler = new WxMpMessageHandler() {
|
WxMpMessageHandler logHandler = new DemoLogHandler();
|
||||||
@Override
|
WxMpMessageHandler textHandler = new DemoTextHandler();
|
||||||
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context,
|
WxMpMessageHandler imageHandler = new DemoImageHandler();
|
||||||
WxMpService wxMpService, WxSessionManager sessionManager) {
|
WxMpMessageHandler oauth2handler = new DemoOAuth2Handler();
|
||||||
WxMpXmlOutTextMessage m
|
WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler();
|
||||||
= WxMpXmlOutMessage.TEXT().content("测试加密消息").fromUser(wxMessage.getToUserName())
|
DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler();
|
||||||
.toUser(wxMessage.getFromUserName()).build();
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
WxMpMessageHandler imageHandler = new WxMpMessageHandler() {
|
wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
|
||||||
@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
|
wxMpMessageRouter
|
||||||
.rule()
|
.rule().handler(logHandler).next()
|
||||||
.async(false)
|
.rule().msgType(WxConsts.XML_MSG_TEXT).content("猜数字").handler(startGuessNumberHandler).next()
|
||||||
.content("哈哈") // 拦截内容为“哈哈”的消息
|
.rule().msgType(WxConsts.XML_MSG_TEXT).rContent("\\d+").handler(checkAnswerHandler).end()
|
||||||
.handler(textHandler)
|
.rule().async(false).content("哈哈").handler(textHandler).end()
|
||||||
.end()
|
.rule().async(false).content("图片").handler(imageHandler).end()
|
||||||
.rule()
|
.rule().async(false).content("oauth").handler(oauth2handler).end()
|
||||||
.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());
|
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
|
||||||
WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
|
WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
|
||||||
response.getWriter().write(outMessage.toXml());
|
if (outMessage != null) {
|
||||||
|
response.getWriter().write(outMessage.toXml());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user