第六章 微信公众号开发之主菜单点击事件

之前写了怎么配置主菜单以后二级菜单里面的属性,今天来讲解一下怎么使他们生效,先看一下官方文档怎么描述的:

 

用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。

点击菜单拉取消息时的事件推送

推送XML数据包示例:

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[FromUser] ]></FromUserName><CreateTime>123456789</CreateTime><MsgType>< ![CDATA[event] ]></MsgType><Event>< ![CDATA[CLICK] ]></Event><EventKey>< ![CDATA[EVENTKEY] ]></EventKey></xml>

参数说明:

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType消息类型,event
Event事件类型,CLICK
EventKey事件KEY值,与自定义菜单接口中KEY值对应

 

当用户点击之后微信微信会把点击事件推送给开发者,你需要做的是把信息接收下来,组装实体类,给用户返回,代码如下:

@RequestMapping(value = "/signature")
@ResponseBody
public  String xmlToMap(HttpServletRequest request,@RequestParam String signature, @RequestParam String timestamp,
                        @RequestParam String nonce) {
    Map<String, String> map = new HashMap<String, String>();
    try {
        SAXReader reader = new SAXReader();
        InputStream ins = null;
        try {
            ins = request.getInputStream();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        Document doc = null;
        try {
            doc = reader.read(ins);
        } catch (DocumentException e1) {
            e1.printStackTrace();
        }
        Element root = doc.getRootElement();
        @SuppressWarnings("unchecked")
        List<Element> list = root.elements();
        for (Element e : list) {
            map.put(e.getName(), e.getText());
        }
        try {
            ins.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }catch (Exception e){

        PlatformLogger.error("错误信息",e);
    }

    return messageImpl.messgage(map);

}

上面的代码是不是很熟悉,之前已经写过了,在关注的时候,这个地址是微信给开发者发送信息的一个地址,写一次就好,

 

public class TextMessage {


    private  String ToUserName;

    private  String FromUserName;

    private  Long CreateTime;

    private  String MsgType;

    private  String Content;

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }

    public String getToUserName() {
        return ToUserName;
    }

    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }

    public String getFromUserName() {
        return FromUserName;
    }

    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }

    public Long getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(Long createTime) {
        CreateTime = createTime;
    }

    public String getMsgType() {
        return MsgType;
    }

    public void setMsgType(String msgType) {
        MsgType = msgType;
    }
}

创建一个符合官方文档的实体类。

public String messgage(Map<String,String> requestMap){

    String textMsgXml = "";

     if (requestMap.size()>0) {

        String fromUserName = requestMap.get("FromUserName");
        // 公众帐号
        String toUserName = requestMap.get("ToUserName");
        // 消息类型
        String msgType = requestMap.get("MsgType");

        String eventKey = requestMap.get("EventKey");

        String event = requestMap.get("Event");

         if (eventKey.equals("31")) {
             TextMessage textMessage = new TextMessage();
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            textMessage.setMsgType("text");
            textMessage.setContent("你好c");
            XStream xStream = new XStream();
            xStream.alias("xml", textMessage.getClass());
            textMsgXml = xStream.toXML(textMessage);
        }
        if (eventKey.equals("32")) {

            TextMessage textMessage = new TextMessage();
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            textMessage.setMsgType("text");
            textMessage.setContent("你好c");
            XStream xStream = new XStream();
            xStream.alias("xml", textMessage.getClass());
            textMsgXml = xStream.toXML(textMessage);
        }
         if (event.equals("subscribe")) {
             TextMessage textMessage = new TextMessage();
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            textMessage.setMsgType("text");
            textMessage.setContent("你好c!");
            XStream xStream = new XStream();
            xStream.alias("xml", textMessage.getClass());
            textMsgXml = xStream.toXML(textMessage);
         }
     }
    return textMsgXml;
}

关注和这个事件可以写在一起,而eventKey这个属性是在主菜单那个方法里面写的,如果忘了可以回去看一下那章,这里不做解释了。

    更多java的知识扫描下方二维码关注公众号,每天更新哦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值