前言:

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

  • 1、关注/取消关注
  • 2、菜单点击

事件类型介绍:

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

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

/*** 请求消息类型:事件*/public static final String REQ_MESSAGE_TYPE_EVENT = "event";/*** 事件类型:subscribe(关注)*/public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";/*** 事件类型:unsubscribe(取消关注)*/public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";/*** 事件类型:CLICK(自定义菜单点击事件)*/public static final String EVENT_TYPE_CLICK = "CLICK";
  • 再在CoreServiceImpl中处理对应事件类型,先上CoreServiceImpl的源码
  • package com.ifp.weixin.biz.core.impl;import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.log4j.Logger;
    import org.springframework.stereotype.Service;
    import com.ifp.weixin.biz.core.CoreService;
    import com.ifp.weixin.constant.Constant;
    import com.ifp.weixin.entity.Message.resp.Article;
    import com.ifp.weixin.entity.Message.resp.NewsMessage;
    import com.ifp.weixin.entity.Message.resp.TextMessage;
    import com.ifp.weixin.util.MessageUtil;@Service("coreService")
    public class CoreServiceImpl implements CoreService {public static Logger log = Logger.getLogger(CoreServiceImpl.class);@Overridepublic String processRequest(HttpServletRequest request) {String respMessage = null;try {// xml请求解析Map<String, String> requestMap = MessageUtil.parseXml(request);// 发送方帐号(open_id)String fromUserName = requestMap.get("FromUserName");// 公众帐号String toUserName = requestMap.get("ToUserName");// 消息类型String msgType = requestMap.get("MsgType");TextMessage textMessage = new TextMessage();textMessage.setToUserName(fromUserName);textMessage.setFromUserName(toUserName);textMessage.setCreateTime(new Date().getTime());textMessage.setMsgType(Constant.RESP_MESSAGE_TYPE_TEXT);textMessage.setFuncFlag(0);String respContent = "";// 文本消息if (msgType.equals(Constant.REQ_MESSAGE_TYPE_TEXT)) {// 接收用户发送的文本消息内容String content = requestMap.get("Content");// 创建图文消息NewsMessage newsMessage = new NewsMessage();newsMessage.setToUserName(fromUserName);newsMessage.setFromUserName(toUserName);newsMessage.setCreateTime(new Date().getTime());newsMessage.setMsgType(Constant.RESP_MESSAGE_TYPE_NEWS);newsMessage.setFuncFlag(0);List<Article> articleList = new ArrayList<Article>();// 单图文消息if ("1".equals(content)) {Article article = new Article();article.setTitle("我是一条单图文消息");article.setDescription("我是描述信息,哈哈哈哈哈哈哈。。。");article.setPicUrl("http://www.iteye.com/upload/logo/user/603624/2dc5ec35-073c-35e7-9b88-274d6b39d560.jpg");article.setUrl("http://tuposky.iteye.com");articleList.add(article);// 设置图文消息个数newsMessage.setArticleCount(articleList.size());// 设置图文消息包含的图文集合newsMessage.setArticles(articleList);// 将图文消息对象转换成xml字符串respMessage = MessageUtil.newsMessageToXml(newsMessage);}// 多图文消息else if ("3".equals(content)) {Article article1 = new Article();article1.setTitle("我是一条多图文消息");article1.setDescription("");article1.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20130913/2013091314543416032.jpg");article1.setUrl("http://tuposky.iteye.com/blog/2008583");Article article2 = new Article();article2.setTitle("微信公众平台开发教程Java版(二)接口配置 ");article2.setDescription("");article2.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111243367254.jpg");article2.setUrl("http://tuposky.iteye.com/blog/2008655");Article article3 = new Article();article3.setTitle("微信公众平台开发教程Java版(三) 消息接收和发送");article3.setDescription("");article3.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111291287031.jpg");article3.setUrl("http://tuposky.iteye.com/blog/2017429");articleList.add(article1);articleList.add(article2);articleList.add(article3);newsMessage.setArticleCount(articleList.size());newsMessage.setArticles(articleList);respMessage = MessageUtil.newsMessageToXml(newsMessage);}//事件处理开始} else if (msgType.equals(Constant.REQ_MESSAGE_TYPE_EVENT)) {// 事件类型String eventType = requestMap.get("Event");if (eventType.equals(Constant.EVENT_TYPE_SUBSCRIBE)) {// 关注respContent = "感谢您关注偶,这里会给您提供最新的公司资讯和公告!\n";StringBuffer contentMsg = new StringBuffer();contentMsg.append("您还可以回复下列数字,体验相应服务").append("\n\n");contentMsg.append("1  我就是个测试的").append("\n");contentMsg.append("2  我木有").append("\n");contentMsg.append("3  我是多图文").append("\n");respContent = respContent+contentMsg.toString();} else if (eventType.equals(Constant.EVENT_TYPE_UNSUBSCRIBE)) {// 取消关注,用户接受不到我们发送的消息了,可以在这里记录用户取消关注的日志信息}  else if (eventType.equals(Constant.EVENT_TYPE_CLICK)) {// 事件KEY值,与创建自定义菜单时指定的KEY值对应String eventKey = requestMap.get("EventKey");// 自定义菜单点击事件if (eventKey.equals("11")) {respContent = "天气预报菜单项被点击!";} else if (eventKey.equals("12")) {respContent = "公交查询菜单项被点击!";}}textMessage.setContent(respContent);respMessage = MessageUtil.textMessageToXml(textMessage);}} catch (Exception e) {e.printStackTrace();}return respMessage;}
    }
    
  • 从第108行开始做事件处理,根据请求的事件类型,做出相应的反应。
  • 菜单点击事件:

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

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

参数说明:

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

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

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

事件处理讲到这里就结束了

转载请注明出处:微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)_五只鸭子的博客-CSDN博客_java 关注/取消关注事件

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

  1. 微信公众平台开发教程Java版(一)环境准备篇

    准备写系列博客,记录下我的微信公众平台学习记录,也为那些摸索中的开发者提供点参考. 希望与大家共同进步. 微信3.0的时候我开始做微信公众账号,那时候没时间研究开发,先用的是编辑者模式,后用开发者模式 ...

  2. 微信公众平台开发教程Java版(三) 消息接收和发送

    前面两章已经介绍了如何接入微信公众平台,这一章说说消息的接收和发送 可以先了解公众平台的消息api接口(接收消息,发送消息) http://mp.weixin.qq.com/wiki/index.ph ...

  3. java 微信 接收消息_微信公众平台开发教程Java版(三) 消息接收和发送

    https://www.iteye.com/blog/tuposky-2017429 前面两章已经介绍了如何接入微信公众平台,这一章说说消息的接收和发送 可以先了解公众平台的消息api接口(接收消息, ...

  4. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  5. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  6. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  7. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备...

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结. 所以下面给大家分享一下我的经验: 第一部分   介绍微信公众号的一些简单 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制

    在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...

  9. java微信公众号开发教程_微信公众平台开发教程(java版本含代码) 中文PDF版 3.13MB...

    本文档将对即将推出的微信公众帐号开发系列连载教程做简单的说明. 教程主要是面向有一定 Java 编程基础的朋友, 目录: 微信公众帐号开发教程第 1 篇-引言  2 微信公众帐号开发教程第 2 篇-微 ...

最新文章

  1. 【No.5 类型转换导致的错误】
  2. 网络优化(中国计量大学现代科技学院第三届“中竞杯”程序设计校赛(网络赛))
  3. 字符串匹配算法 KMP
  4. Bitcoin.com| 比特币现金2019·年度回顾
  5. 如何数据整合IBM Tivoli
  6. Spring MVC 特性实现文件下载
  7. pccad自定义图框_(PCCAD自定义标题栏详细方法.doc
  8. TCP为何采用三次握手来建立连接,若采用二次握手可以吗
  9. Packet Tracer 5.0 建构 CCNA 实验攻略——路由器实现 Vlan 间通信
  10. 动图展示16个Sublime Text快捷键用法 ---------------物化的sublime
  11. QuickTime Player安装Soundflower插件实现完整录屏功能
  12. 大三学生HTML期末作业,网页制作作业——HTML+CSS+JavaScript饮品饮料茶(7页)
  13. 订单可视化(智能制造、流程再造、企业信息化) 第二篇 背景及问题提出
  14. POJ 3295: Tautology
  15. python将字典按行或按列写入csv文件
  16. 京东到家机器学习平台建设
  17. 从MIXMAX概率模型理解Bayesian建模方法
  18. 冬至计算(一千年冬至计算)
  19. 计算机基础知识(基础入门小白专属)四
  20. ModuleNotFoundError: No module named gensim.corpora

热门文章

  1. python 报错 can‘t start new thread
  2. I'm a Mac:雄狮训练手册
  3. 字符串中首次出现三次的字符
  4. 绿坝对IT行业的沉重打击,从此只能运行Windows操作系统了
  5. 阿克曼(Ackermann)函数—递归
  6. IBM T43 刷bios 装win7教程
  7. 用计算机打开密码,电脑开机密码怎么设置?
  8. 猫耳RGB设计观感超萌,还支持7.1声道,硕美科GS510头戴耳机更适合女生
  9. android运动轨迹怎么画,Android轻松画出触摸轨迹
  10. 笔记【Redis数据结构、常用命令、key淘汰及持久化策略】