700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)

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

时间:2023-05-26 15:28:46

相关推荐

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

前言:

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

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("/upload/logo/user/603624/2dc5ec35-073c-35e7-9b88-274d6b39d560.jpg");article.setUrl("");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("/viewResourcesAction//logo/0913/091314543416032.jpg");article1.setUrl("/blog/583");Article article2 = new Article();article2.setTitle("微信公众平台开发教程Java版(二)接口配置 ");article2.setDescription("");article2.setPicUrl("/viewResourcesAction//logo/1021/102111243367254.jpg");article2.setUrl("/blog/655");Article article3 = new Article();article3.setTitle("微信公众平台开发教程Java版(三) 消息接收和发送");article3.setDescription("");article3.setPicUrl("/viewResourcesAction//logo/1021/102111291287031.jpg");article3.setUrl("/blog/429");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 关注/取消关注事件

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。