菜单点击/关注/取消关注

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

  •  

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

 

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

   

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

   

Java代码   收藏代码
  1. /** 
  2.      * 请求消息类型:事件 
  3.      */  
  4.     public static final String REQ_MESSAGE_TYPE_EVENT = "event";  
  5.   
  6.     /** 
  7.      * 事件类型:subscribe(关注) 
  8.      */  
  9.     public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";  
  10.   
  11.     /** 
  12.      * 事件类型:unsubscribe(取消关注) 
  13.      */  
  14.     public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";  
  15.   
  16.     /** 
  17.      * 事件类型:CLICK(自定义菜单点击事件) 
  18.      */  
  19.     public static final String EVENT_TYPE_CLICK = "CLICK";  
  20.       

 

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

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

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

     参数说明:


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

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

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


     
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值