Sfoglia il codice sorgente

添加猜数字游戏的demo

master
Daniel Qian 10 anni fa
parent
commit
ffe63e71eb
8 ha cambiato i file con 257 aggiunte e 79 eliminazioni
  1. +71
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java
  2. +38
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoImageHandler.java
  3. +21
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoLogHandler.java
  4. +27
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoOAuth2Handler.java
  5. +54
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java
  6. +25
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoTextHandler.java
  7. +18
    -78
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java
  8. +3
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpEndpointServlet.java

+ 71
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoCheckAnswerHandler.java Vedi File

@@ -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;
}

}

+ 38
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoImageHandler.java Vedi File

@@ -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;
}
}

+ 21
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoLogHandler.java Vedi File

@@ -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;
}
}

+ 27
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoOAuth2Handler.java Vedi File

@@ -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();
}
}

+ 54
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoStartGuessNumberHandler.java Vedi File

@@ -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;

}
}

+ 25
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/DemoTextHandler.java Vedi File

@@ -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;
}

}

+ 18
- 78
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java Vedi File

@@ -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()
;

}


+ 3
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpEndpointServlet.java Vedi File

@@ -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;
}



Caricamento…
Annulla
Salva