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