事件处理是非常重要的,这一章讲讲常见的事件处理

  • 1、关注/取消关注
  • 2、菜单点击
事件类型介绍:
  • 在微信中有事件请求是消息请求中的一种。请求类型为:event
  • 而event事件类型又分多种事件类型,具体分
  • 关注:subscribe
  • 取消关注:unsubscribe
  • 自定义菜单点击:CLICK

根据上面的类型分类可建对应的常量

Java代码  
  1. /**
  2. * 请求消息类型:事件
  3. */
  4. public static final String REQ_MESSAGE_TYPE_EVENT = "event";
  5. /**
  6. * 事件类型:subscribe(关注)
  7. */
  8. public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
  9. /**
  10. * 事件类型:unsubscribe(取消关注)
  11. */
  12. public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
  13. /**
  14. * 事件类型:CLICK(自定义菜单点击事件)
  15. */
  16. public static final String EVENT_TYPE_CLICK = "CLICK";
  • 再在CoreServiceImpl中处理对应事件类型,先上CoreServiceImpl的源码
  • Java代码  
    1. package com.ifp.weixin.biz.core.impl;
    2. import java.util.ArrayList;
    3. import java.util.Date;
    4. import java.util.List;
    5. import java.util.Map;
    6. import javax.servlet.http.HttpServletRequest;
    7. import org.apache.log4j.Logger;
    8. import org.springframework.stereotype.Service;
    9. import com.ifp.weixin.biz.core.CoreService;
    10. import com.ifp.weixin.constant.Constant;
    11. import com.ifp.weixin.entity.Message.resp.Article;
    12. import com.ifp.weixin.entity.Message.resp.NewsMessage;
    13. import com.ifp.weixin.entity.Message.resp.TextMessage;
    14. import com.ifp.weixin.util.MessageUtil;
    15. @Service("coreService")
    16. public class CoreServiceImpl implements CoreService {
    17. public static Logger log = Logger.getLogger(CoreServiceImpl.class);
    18. @Override
    19. public String processRequest(HttpServletRequest request) {
    20. String respMessage = null;
    21. try {
    22. // xml请求解析
    23. Map<String, String> requestMap = MessageUtil.parseXml(request);
    24. // 发送方帐号(open_id)
    25. String fromUserName = requestMap.get("FromUserName");
    26. // 公众帐号
    27. String toUserName = requestMap.get("ToUserName");
    28. // 消息类型
    29. String msgType = requestMap.get("MsgType");
    30. TextMessage textMessage = new TextMessage();
    31. textMessage.setToUserName(fromUserName);
    32. textMessage.setFromUserName(toUserName);
    33. textMessage.setCreateTime(new Date().getTime());
    34. textMessage.setMsgType(Constant.RESP_MESSAGE_TYPE_TEXT);
    35. textMessage.setFuncFlag(0);
    36. String respContent = "";
    37. // 文本消息
    38. if (msgType.equals(Constant.REQ_MESSAGE_TYPE_TEXT)) {
    39. // 接收用户发送的文本消息内容
    40. String content = requestMap.get("Content");
    41. // 创建图文消息
    42. NewsMessage newsMessage = new NewsMessage();
    43. newsMessage.setToUserName(fromUserName);
    44. newsMessage.setFromUserName(toUserName);
    45. newsMessage.setCreateTime(new Date().getTime());
    46. newsMessage.setMsgType(Constant.RESP_MESSAGE_TYPE_NEWS);
    47. newsMessage.setFuncFlag(0);
    48. List<Article> articleList = new ArrayList<Article>();
    49. // 单图文消息
    50. if ("1".equals(content)) {
    51. Article article = new Article();
    52. article.setTitle("我是一条单图文消息");
    53. article.setDescription("我是描述信息,哈哈哈哈哈哈哈。。。");
    54. article.setPicUrl("http://www.iteye.com/upload/logo/user/603624/2dc5ec35-073c-35e7-9b88-274d6b39d560.jpg");
    55. article.setUrl("http://tuposky.iteye.com");
    56. articleList.add(article);
    57. // 设置图文消息个数
    58. newsMessage.setArticleCount(articleList.size());
    59. // 设置图文消息包含的图文集合
    60. newsMessage.setArticles(articleList);
    61. // 将图文消息对象转换成xml字符串
    62. respMessage = MessageUtil.newsMessageToXml(newsMessage);
    63. }
    64. // 多图文消息
    65. else if ("3".equals(content)) {
    66. Article article1 = new Article();
    67. article1.setTitle("我是一条多图文消息");
    68. article1.setDescription("");
    69. article1.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20130913/2013091314543416032.jpg");
    70. article1.setUrl("http://tuposky.iteye.com/blog/2008583");
    71. Article article2 = new Article();
    72. article2.setTitle("微信公众平台开发教程Java版(二)接口配置 ");
    73. article2.setDescription("");
    74. article2.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111243367254.jpg");
    75. article2.setUrl("http://tuposky.iteye.com/blog/2008655");
    76. Article article3 = new Article();
    77. article3.setTitle("微信公众平台开发教程Java版(三) 消息接收和发送");
    78. article3.setDescription("");
    79. article3.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111291287031.jpg");
    80. article3.setUrl("http://tuposky.iteye.com/blog/2017429");
    81. articleList.add(article1);
    82. articleList.add(article2);
    83. articleList.add(article3);
    84. newsMessage.setArticleCount(articleList.size());
    85. newsMessage.setArticles(articleList);
    86. respMessage = MessageUtil.newsMessageToXml(newsMessage);
    87. }
    88. //事件处理开始
    89. } else if (msgType.equals(Constant.REQ_MESSAGE_TYPE_EVENT)) {
    90. // 事件类型
    91. String eventType = requestMap.get("Event");
    92. if (eventType.equals(Constant.EVENT_TYPE_SUBSCRIBE)) {
    93. // 关注
    94. respContent = "感谢您关注偶,这里会给您提供最新的公司资讯和公告!\n";
    95. StringBuffer contentMsg = new StringBuffer();
    96. contentMsg.append("您还可以回复下列数字,体验相应服务").append("\n\n");
    97. contentMsg.append("1  我就是个测试的").append("\n");
    98. contentMsg.append("2  我木有").append("\n");
    99. contentMsg.append("3  我是多图文").append("\n");
    100. respContent = respContent+contentMsg.toString();
    101. } else if (eventType.equals(Constant.EVENT_TYPE_UNSUBSCRIBE)) {
    102. // 取消关注,用户接受不到我们发送的消息了,可以在这里记录用户取消关注的日志信息
    103. }  else if (eventType.equals(Constant.EVENT_TYPE_CLICK)) {
    104. // 事件KEY值,与创建自定义菜单时指定的KEY值对应
    105. String eventKey = requestMap.get("EventKey");
    106. // 自定义菜单点击事件
    107. if (eventKey.equals("11")) {
    108. respContent = "天气预报菜单项被点击!";
    109. } else if (eventKey.equals("12")) {
    110. respContent = "公交查询菜单项被点击!";
    111. }
    112. }
    113. textMessage.setContent(respContent);
    114. respMessage = MessageUtil.textMessageToXml(textMessage);
    115. }
    116. } catch (Exception e) {
    117. e.printStackTrace();
    118. }
    119. return respMessage;
    120. }
    121. }
  • 从第108行开始做事件处理,根据请求的事件类型,做出相应的反应。
  • 菜单点击事件:

单独把菜单点击事件拉出来详细说说

用户点击自定义菜单后,如果菜单按钮设置为click类型,则微信会把此次点击事件推送给开发者,注意view类型(跳转到URL)的菜单点击不会上报。

参数说明:

  • 要注意的是 EventKey 这个参数,与菜单创建的时候中的key值是对应的。

写出来的效果图为:依次触发的事件是

关注,点击天气预报菜单,点击公交查询菜单

菜单点击/关注/取消关注相关推荐

  1. 微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)

    前言: 事件处理是非常重要的,这一章讲讲常见的事件处理 1.关注/取消关注 2.菜单点击 事件类型介绍: 在微信中有事件请求是消息请求中的一种.请求类型为:event 而event事件类型又分多种事件 ...

  2. Spring项目接入微信关注/取消关注事件监控(含代码demo,自动回复图文)

    微信官方文档地址:关注/取消关注事件 | 微信开放文档 以上,文档提到:用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL,接下来我们就来看看这个URL怎么配置. [配置步骤]: ...

  3. 微信公众号关注/取消关注事件推送开发记录

    一.奉上官方文档 关注/取消关注事件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/doc/offiaccount/Message_Managem ...

  4. 使用.net 操作 微信公众平台 —— 接收用户操作 —— 关注/取消关注 公众号

    目录 1. 使用.net 操作 微信公众平台 -- 接入 2. 使用.net 操作 微信公众平台 -- 生成微信菜单 3. 使用.net 操作 微信公众平台 -- 接收并回复用户消息 3.1 使用.n ...

  5. 微信公众号开发-----接送事件推送之关注/取消关注

    本文主要实现的功能包括 关注/取消关注事件 阅读本文之前请先认真阅读微信公众号技术文档之接受事件推送 需注意的是:验证消息的确来自微信服务器和接收事件时微信服务器都会发送请求到填写的服务器地址URL上 ...

  6. Java 微信关注/取消关注事件

    Java 微信关注/取消关注事件 一.需求.思路 二.文档.配置 配置步骤1 配置步骤2 三.代码 1.引入依赖包 2.controller 3.封装消息对象 4.service.解密 5.工具包 一 ...

  7. 根据微信公众号关注/取消关注事件,获取用户信息

    第一步:微信公众平台->基本配置->服务器配置->配置接收地址 第二步:接收微信服务器推送过来的事件 微信文档地址: 关注/取消关注事件 用户在关注与取消关注公众号时,微信会把这个事 ...

  8. 微信 关注/取消关注事件

    <?php /*** wechat php test*/ //确定下你的token那个地方和微信公众平台的一致.然后URL那个路径是你真正设置验证的这个路径.然后验签那个地方是没有设置才去验签的 ...

  9. php关注 取消关注事件,微信公众平台开发关注/取消关注事件例子

    用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL.方便开发者给用户下发欢迎消息或者做帐号的解绑 下面是一个微信公众平台关注和取消关注的实例:responseMsg(); } el ...

最新文章

  1. angularjs中state的参数4_一文梳理pytorch保存和重载模型参数攻略
  2. Linux Shell 文本处理工具集锦
  3. 主流平台应用与游戏的编程语言/工具(图)
  4. Fiddler过滤指定域名
  5. [Matlab]函数表达式运算
  6. 代码块是什么?该如何使用?
  7. JSONOBject的fluentPut(key,value)方法:可链式设置元素
  8. 【无线也安全】屏蔽蹭网一族
  9. Java新职篇:面向对象编程的3个原则是什么?
  10. flex-direction css3属性设定弹性盒子模型子元素反向排列
  11. KVM虚拟化实践-老男孩架构师课程教案笔记分享
  12. C语言-C语言程序的结构
  13. 遗传算法求解带时间窗的VRP问题(python)
  14. 台式计算机有哪些部分组成,常用台式电脑的基本组成
  15. 杭州电子科技大学计算机专业考研分数线,2019杭州电子科技大学研究生分数线汇总(含2016-2019历年复试)...
  16. 电影票(水题 杭电排位赛-6)
  17. 微软加入JCP参与Java未来版本开发
  18. CDA I级学习 - 漏斗模型
  19. mysql 在当前时间上加几小时
  20. 自我实现tcmalloc的项目简化版本

热门文章

  1. 使用react实现后台管理系统项目
  2. 【工具使用】——Metasploit(MSF)使用详解(超详细)
  3. 乐信,转向路口的横风
  4. python膨胀卷积_python纽比卷积用0到t的极限解卷积积分
  5. python用product函数来生成N位二进制数的全排列
  6. 在R中做含有哑变量的gam模型并可视化
  7. [布什告别演讲].Presidential.Farewell.Speech.George.W.Bush.
  8. PHP strtotime函数参数
  9. JAVA EE案例:基于MyBatis注解的学生管理程序
  10. 海康摄像头接线颜色顺序