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

微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)前言:事件处理是非常重要的,这一章讲讲常见的事件处理 1、关注/取消关注 2、菜单点击事件类型介绍:在微信中有事件请求是消息请求中的一种。请求类型为:event 而event事件类型又分多种事件类型,具体分 关注:subscribe 取消关注:unsubscribe 自定义菜单点击:CLICK 根据上面的类型分类可建对应的常量…

大家好,又见面了,我是你们的朋友全栈君。

前言:

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

  • 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);
    
    	@Override
    	public 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)的菜单点击不会上报。

     参数说明:

  • 微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)
     
  • 要注意的是 EventKey 这个参数,与菜单创建的时候中的key值是对应的。

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

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

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

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

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

     

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150664.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 构造哈夫曼树的算法_哈夫曼树的应用数据结构

    构造哈夫曼树的算法_哈夫曼树的应用数据结构一、什么是赫夫曼树给定n个权值作为n个叶子节点,构造一课二叉树,若该树的带权路径长度和(wpl)达到最小,称这样的二叉树为最优二叉树,也就是赫夫曼树。要理解这句话,我们需要了解几个关键词:路径:

    2022年8月16日
    3
  • 360认证得力数据恢复软件,摄影爱好者的救星

    360认证得力数据恢复软件,摄影爱好者的救星  我是一位计算机工作者,身边许多朋友也经常向我咨询一些电脑方面的问题,最为突出的问题就是如何恢复硬盘数据和sd卡,U盘数据,我用过许多软件,但从没有一款软件像得力数据恢复软件这么优秀,这话一点都不假。  第一,无毒,众所周知,一款软件好坏,无毒是最大的招牌,它是经过360,金山毒霸,百度杀毒,卡巴斯基,电脑管家,诺顿杀毒等主流杀毒软件认证的。干净实用。  第二,下载方便,可以经过该地址:h…

    2022年8月20日
    5
  • 详细阐述基于时间的反向传播算法(Back-Propagation Through Time,BPTT)「建议收藏」

    详细阐述基于时间的反向传播算法(Back-Propagation Through Time,BPTT)「建议收藏」上一节我们说了详细展示RNN的网络结构以及前向传播,在了解RNN的结构之后,如何训练RNN就是一个重要问题,训练模型就是更新模型的参数,也就是如何进行反向传播,也就意味着如何对参数进行求导。本篇内容就是详细介绍RNN的反向传播算法,即BPTT。首先让我们来用动图来表示RNN的损失是如何产生的,以及如何进行反向传播,如下图所示。上面两幅图片,已经很详细的展示了损失是如何产生的,以及…

    2022年6月23日
    37
  • ASP.NET页面事件:顺序与回传详解

    当页面被提交请求第一个方法永远是构造函数。您可以在构造函数里面初始一些自定义属性或对象,不过这时候因为页面还没有被完全初始化所以多少会有些限制。特别地,您需要使用HttpContext对象。当前可以使

    2021年12月26日
    35
  • idea主题插件网址

    idea主题插件网址idea主题插件网址ii​​​​​​​MaterialThemeUI-IntelliJIDEsPlugin|Marketplace

    2022年6月27日
    56
  • Vue非父子组件传值「建议收藏」

    Vue非父子组件传值「建议收藏」Vue非父子组件传值:事件总线$attrs/listeners

    2022年5月16日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号