WxMaDemoServer.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package cn.binarywang.wx.miniapp.demo;
  2. import cn.binarywang.wx.miniapp.api.WxMaService;
  3. import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
  4. import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
  5. import cn.binarywang.wx.miniapp.bean.WxMaMessage;
  6. import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
  7. import cn.binarywang.wx.miniapp.config.WxMaConfig;
  8. import cn.binarywang.wx.miniapp.constant.WxMaConstants;
  9. import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
  10. import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
  11. import cn.binarywang.wx.miniapp.test.TestConfig;
  12. import com.google.common.collect.Lists;
  13. import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
  14. import me.chanjar.weixin.common.exception.WxErrorException;
  15. import me.chanjar.weixin.common.session.WxSessionManager;
  16. import org.eclipse.jetty.server.Server;
  17. import org.eclipse.jetty.servlet.ServletHandler;
  18. import org.eclipse.jetty.servlet.ServletHolder;
  19. import java.io.File;
  20. import java.io.IOException;
  21. import java.io.InputStream;
  22. import java.util.Map;
  23. import java.util.concurrent.locks.ReentrantLock;
  24. /**
  25. * @author <a href="https://github.com/binarywang">Binary Wang</a>
  26. */
  27. public class WxMaDemoServer {
  28. private static final WxMaMessageHandler logHandler = new WxMaMessageHandler() {
  29. @Override
  30. public void handle(WxMaMessage wxMessage, Map<String, Object> context,
  31. WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
  32. System.out.println("收到消息:" + wxMessage.toString());
  33. service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
  34. .toUser(wxMessage.getFromUser()).build());
  35. }
  36. };
  37. private static final WxMaMessageHandler textHandler = new WxMaMessageHandler() {
  38. @Override
  39. public void handle(WxMaMessage wxMessage, Map<String, Object> context,
  40. WxMaService service, WxSessionManager sessionManager)
  41. throws WxErrorException {
  42. service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
  43. .toUser(wxMessage.getFromUser()).build());
  44. }
  45. };
  46. private static final WxMaMessageHandler picHandler = new WxMaMessageHandler() {
  47. @Override
  48. public void handle(WxMaMessage wxMessage, Map<String, Object> context,
  49. WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
  50. try {
  51. WxMediaUploadResult uploadResult = service.getMediaService()
  52. .uploadMedia(WxMaConstants.MediaType.IMAGE, "png",
  53. ClassLoader.getSystemResourceAsStream("tmp.png"));
  54. service.getMsgService().sendKefuMsg(
  55. WxMaKefuMessage
  56. .newImageBuilder()
  57. .mediaId(uploadResult.getMediaId())
  58. .toUser(wxMessage.getFromUser())
  59. .build());
  60. } catch (WxErrorException e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. };
  65. private static final WxMaMessageHandler qrcodeHandler = new WxMaMessageHandler() {
  66. @Override
  67. public void handle(WxMaMessage wxMessage, Map<String, Object> context,
  68. WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
  69. try {
  70. final File file = service.getQrcodeService().createQrcode("123", 430);
  71. WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia(WxMaConstants.MediaType.IMAGE, file);
  72. service.getMsgService().sendKefuMsg(
  73. WxMaKefuMessage
  74. .newImageBuilder()
  75. .mediaId(uploadResult.getMediaId())
  76. .toUser(wxMessage.getFromUser())
  77. .build());
  78. } catch (WxErrorException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. };
  83. private static final WxMaMessageHandler templateMsgHandler = new WxMaMessageHandler() {
  84. @Override
  85. public void handle(WxMaMessage wxMessage, Map<String, Object> context,
  86. WxMaService service, WxSessionManager sessionManager)
  87. throws WxErrorException {
  88. service.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder()
  89. .templateId(templateId).data(Lists.newArrayList(
  90. new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177")))
  91. .toUser(wxMessage.getFromUser())
  92. .formId("自己替换可用的formid")
  93. .build());
  94. }
  95. };
  96. private static WxMaConfig config;
  97. private static WxMaService service;
  98. private static WxMaMessageRouter router;
  99. private static String templateId;
  100. public static void main(String[] args) throws Exception {
  101. init();
  102. Server server = new Server(8080);
  103. ServletHandler servletHandler = new ServletHandler();
  104. server.setHandler(servletHandler);
  105. ServletHolder endpointServletHolder = new ServletHolder(new WxMaPortalServlet(config, service, router));
  106. servletHandler.addServletWithMapping(endpointServletHolder, "/*");
  107. server.start();
  108. server.join();
  109. }
  110. private static void init() {
  111. try (InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml")) {
  112. TestConfig config = TestConfig.fromXml(is1);
  113. config.setAccessTokenLock(new ReentrantLock());
  114. templateId = config.getTemplateId();
  115. WxMaDemoServer.config = config;
  116. service = new WxMaServiceImpl();
  117. service.setWxMaConfig(config);
  118. router = new WxMaMessageRouter(service);
  119. router.rule().handler(logHandler).next()
  120. .rule().async(false).content("模板").handler(templateMsgHandler).end()
  121. .rule().async(false).content("文本").handler(textHandler).end()
  122. .rule().async(false).content("图片").handler(picHandler).end()
  123. .rule().async(false).content("二维码").handler(qrcodeHandler).end();
  124. } catch (IOException e) {
  125. e.printStackTrace();
  126. }
  127. }
  128. }