1、微信自定义菜单的两种类型click和view微信自定义菜单的两种类型(click和view)自定义菜单的两种类型(click和view)公众平台API文档中给出了自定义菜单的json结构示例,我从中截取两个菜单项的json代码,一个是click类型,另一个是view类型,如下所示。type:click,name:今日歌曲,key:V1001_TODAY_MUSIC,type:view,name:歌手简介,url:qq/从上面可以看出,两种类型的菜单除了type值不同之外,属性也有差别。click类型的菜单有key属性,而view类型的菜单没有key属性,与之对应的是url属性。通过上一篇的学习
2、我们知道,key值是用于判断用户点击了哪个click类型的菜单项。而view类型的菜单没有key属性,目前无法在公众账号后台判断是否有用户点击了view类型的菜单项,也就没办法知道哪个用户点击了view类型的菜单项。建立view类型的菜单对象View类型的菜单有3个属性:type、name和url。在上一篇文章中,我们创建了菜单项的基类Button,Button类只有一个属性name。View类型的菜单对象也需要继承Button类,代码如下:/*view类型的菜单*author*date*/publilassViewButtonextendsButtonprivateStringtype;pr
3、ivateStringurl;publicStringgetType()returntype;publicvoidsetType(Stringtype)this.type=type;publicStringgetUrl()returnurl;publicvoidsetUrl(Stringurl)this.url=url;创建带view类型的菜单示例我们对前一篇文章中给出的菜单创建代码进行调整,增加view类型的菜单项,完整的菜单创建代码如下:import.liufeng.weixin.pojo.AessToken;import.liufeng.weixin.pojo.Button;import
4、.liufeng.weixin.pojo.CommonButton;import.liufeng.weixin.pojo.ComplexButton;import.liufeng.weixin.pojo.Menu;import.liufeng.weixin.pojo.ViewButton;import.liufeng.weixin.util.WeixinUtil;import.slf4j.Logger;import.slf4j.LoggerFactory;/*菜单管理器类*author*date2013-08-08*/publilassMenuManagerprivatestaticLogge
5、rlog=LoggerFactory.getLogger(MenuManager.class);publicstaticvoidmain(Stringargs)/第三方用户唯一凭证StringappId=000000000000000000;/第三方用户唯一凭证密钥StringappSecret=00000000000000000000000000000000;/调用接口获取aess_tokenAessTokenat=WeixinUtil.getAessToken(appId,appSecret);if(null!=at)/调用接口创建菜单intresult=WeixinUtil.create
6、Menu(getMenu(),at.getToken();/判断菜单创建结果if(0=result)log.info(菜单创建成功!);elselog.info(菜单创建失败,错误码:+result);/*组装菜单数据*return*/privatestaticMenugetMenu()CommonButtonbtn11=newCommonButton();btn11.setName(天气预报);btn11.setType(click);btn11.setKey(11);CommonButtonbtn12=newCommonButton();btn12.setName(公交查询);btn12.
7、setType(click);btn12.setKey(12);CommonButtonbtn13=newCommonButton();btn13.setName(周边搜索);btn13.setType(click);btn13.setKey(13);CommonButtonbtn14=newCommonButton();btn14.setName(历史上的今天);btn14.setType(click);btn14.setKey(14);CommonButtonbtn15=newCommonButton();btn15.setName(电影排行榜);btn15.setType(click);
8、btn15.setKey(32);CommonButtonbtn21=newCommonButton();btn21.setName(歌曲点播);btn21.setType(click);btn21.setKey(21);CommonButtonbtn22=newCommonButton();btn22.setName(经典游戏);btn22.setType(click);btn22.setKey(22);CommonButtonbtn23=newCommonButton();btn23.setName(美女电台);btn23.setType(click);btn23.setKey(23);C
9、ommonButtonbtn24=newCommonButton();btn24.setName(人脸识别);btn24.setType(click);btn24.setKey(24);CommonButtonbtn25=newCommonButton();btn25.setName(聊天唠嗑);btn25.setType(click);btn25.setKey(25);CommonButtonbtn31=newCommonButton();btn31.setName(Q友圈);btn31.setType(click);btn31.setKey(31);CommonButtonbtn33=ne
10、wCommonButton();btn33.setName(幽默笑话);btn33.setType(click);btn33.setKey(33);CommonButtonbtn34=newCommonButton();btn34.setName(用户反馈);btn34.setType(click);btn34.setKey(34);CommonButtonbtn35=newCommonButton();btn35.setName(关于我们);btn35.setType(click);btn35.setKey(35);ViewButtonbtn32=newViewButton();btn32.
11、setName(使用帮助);btn32.setType(view);btn32.setUrl(gotoip2/xiaoqrobot/help.jsp);ComplexButtonmainBtn1=newComplexButton();mainBtn1.setName(生活助手);mainBtn1.setSub_button(newButtonbtn11,btn12,btn13,btn14,btn15);ComplexButtonmainBtn2=newComplexButton();mainBtn2.setName(休闲驿站);mainBtn2.setSub_button(newButtonb
12、tn21,btn22,btn23,btn24,btn25);ComplexButtonmainBtn3=newComplexButton();mainBtn3.setName(更多);mainBtn3.setSub_button(newButtonbtn31,btn33,btn34,btn35,btn32);/*这是公众号xiaoqrobot目前的菜单结构,每个一级菜单都有二级菜单项<br*在某个一级菜单下没有二级菜单的情况,menu该如何定义呢<br*比如,第三个一级菜单项不是“更多体验”,而直接是“幽默笑话”,那么menu应该这样定义:<br*menu.setButton(newButtonmainBtn1,mainBtn2,btn33);*/Menumenu=newMenu();menu.setButton(newButtonmainBtn1,mainBtn2,mainBtn3);returnmenu;原作者:柳峰