关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 8916|回复: 0

微信公众帐号开发第15篇-自定义菜单view类型(访问网...

[复制链接]
发表于 2015-7-28 15:36:40 | 显示全部楼层 |阅读模式

引言及内容概要

    距离写上一篇文章《自定义菜单的创建及菜单事件响应》整整过了两个月的时间,那时公众平台还没有开放view类型的菜单。在不久前,微信公众平台悄悄开放了view类型的菜单,却没有在首页发布任何通知,貌似微信团队很喜欢这么干。一个偶然的机会,我留意到API文档的自定义菜单接口发生了变化,增加了对菜单view类型的说明:

  view(访问网页):
用户点击view类型按钮后,会直接跳转到开发者指定的url中。

    于是我在第一时间更新了小q机器人(微信号:xiaoqrobot)的菜单,在一级菜单“更多”下增加了二级菜单“使用帮助”,点击该菜单项会直接跳转到网页,如下图所示。



    本篇文章就为大家介绍下view类型的自定义菜单该如何创建。


自定义菜单的两种类型(click和view)

    公众平台API文档中给出了自定义菜单的json结构示例,我从中截取两个菜单项的json代码,一个是click类型,另一个是view类型,如下所示。


  • {     
  •     "type":"click",  
  •     "name":"今日歌曲",  
  •     "key":"V1001_TODAY_MUSIC"  
  • },  
  • {  
  •     "type":"view",  
  •     "name":"歌手简介",  
  •     "url":"http://www.qq.com/"  
  • }  

    从上面可以看出,两种类型的菜单除了type值不同之外,属性也有差别。click类型的菜单有key属性,而view类型的菜单没有key属性,与之对应的是url属性。通过上一篇的学习我们知道,key值是用于判断用户点击了哪个click类型的菜单项。而view类型的菜单没有key属性,目前无法在公众账号后台判断是否有用户点击了view类型的菜单项,也就没办法知道哪个用户点击了view类型的菜单项。

建立view类型的菜单对象

    View类型的菜单有3个属性:type、name和url。在上一篇文章中,我们创建了菜单项的基类Button,Button类只有一个属性name。View类型的菜单对象也需要继承Button类,代码如下:


  • package org.liufeng.weixin.pojo;  
  •   
  • /**
  • * view类型的菜单
  • *  
  • * @author liuyq
  • * @date 2013-04-10
  • */  
  • public class ViewButton extends Button {  
  •     private String type;  
  •     private String url;  
  •   
  •     public String getType() {  
  •         return type;  
  •     }  
  •   
  •     public void setType(String type) {  
  •         this.type = type;  
  •     }  
  •   
  •     public String getUrl() {  
  •         return url;  
  •     }  
  •   
  •     public void setUrl(String url) {  
  •         this.url = url;  
  •     }  
  • }  



创建带view类型的菜单示例

    我们对前一篇文章中给出的菜单创建代码进行调整,增加view类型的菜单项,完整的菜单创建代码如下:


  • package org.liufeng.weixin.main;  
  •   
  • import org.liufeng.weixin.pojo.AccessToken;  
  • import org.liufeng.weixin.pojo.Button;  
  • import org.liufeng.weixin.pojo.CommonButton;  
  • import org.liufeng.weixin.pojo.ComplexButton;  
  • import org.liufeng.weixin.pojo.Menu;  
  • import org.liufeng.weixin.pojo.ViewButton;  
  • import org.liufeng.weixin.util.WeixinUtil;  
  • import org.slf4j.Logger;  
  • import org.slf4j.LoggerFactory;  
  •   
  • /**
  • * 菜单管理器类
  • *  
  • * @author liufeng
  • * @date 2013-08-08
  • */  
  • public class MenuManager {  
  •     private static Logger log = LoggerFactory.getLogger(MenuManager.class);  
  •   
  •     public static void main(String[] args) {  
  •         // 第三方用户唯一凭证  
  •         String appId = "000000000000000000";  
  •         // 第三方用户唯一凭证密钥  
  •         String appSecret = "00000000000000000000000000000000";  
  •   
  •         // 调用接口获取access_token  
  •         AccessToken at = WeixinUtil.getAccessToken(appId, appSecret);  
  •   
  •         if (null != at) {  
  •             // 调用接口创建菜单  
  •             int result = WeixinUtil.createMenu(getMenu(), at.getToken());  
  •   
  •             // 判断菜单创建结果  
  •             if (0 == result)  
  •                 log.info("菜单创建成功!");  
  •             else  
  •                 log.info("菜单创建失败,错误码:" + result);  
  •         }  
  •     }  
  •   
  •     /**
  •      * 组装菜单数据
  •      *  
  •      * @return
  •      */  
  •     private static Menu getMenu() {  
  •         CommonButton btn11 = new CommonButton();  
  •         btn11.setName("天气预报");  
  •         btn11.setType("click");  
  •         btn11.setKey("11");  
  •   
  •         CommonButton btn12 = new CommonButton();  
  •         btn12.setName("公交查询");  
  •         btn12.setType("click");  
  •         btn12.setKey("12");  
  •   
  •         CommonButton btn13 = new CommonButton();  
  •         btn13.setName("周边搜索");  
  •         btn13.setType("click");  
  •         btn13.setKey("13");  
  •   
  •         CommonButton btn14 = new CommonButton();  
  •         btn14.setName("历史上的今天");  
  •         btn14.setType("click");  
  •         btn14.setKey("14");  
  •          
  •         CommonButton btn15 = new CommonButton();  
  •         btn15.setName("电影排行榜");  
  •         btn15.setType("click");  
  •         btn15.setKey("32");  
  •   
  •         CommonButton btn21 = new CommonButton();  
  •         btn21.setName("歌曲点播");  
  •         btn21.setType("click");  
  •         btn21.setKey("21");  
  •   
  •         CommonButton btn22 = new CommonButton();  
  •         btn22.setName("经典游戏");  
  •         btn22.setType("click");  
  •         btn22.setKey("22");  
  •   
  •         CommonButton btn23 = new CommonButton();  
  •         btn23.setName("美女电台");  
  •         btn23.setType("click");  
  •         btn23.setKey("23");  
  •   
  •         CommonButton btn24 = new CommonButton();  
  •         btn24.setName("人脸识别");  
  •         btn24.setType("click");  
  •         btn24.setKey("24");  
  •   
  •         CommonButton btn25 = new CommonButton();  
  •         btn25.setName("聊天唠嗑");  
  •         btn25.setType("click");  
  •         btn25.setKey("25");  
  •   
  •         CommonButton btn31 = new CommonButton();  
  •         btn31.setName("Q友圈");  
  •         btn31.setType("click");  
  •         btn31.setKey("31");  
  •   
  •         CommonButton btn33 = new CommonButton();  
  •         btn33.setName("幽默笑话");  
  •         btn33.setType("click");  
  •         btn33.setKey("33");  
  •          
  •         CommonButton btn34 = new CommonButton();  
  •         btn34.setName("用户反馈");  
  •         btn34.setType("click");  
  •         btn34.setKey("34");  
  •          
  •         CommonButton btn35 = new CommonButton();  
  •         btn35.setName("关于我们");  
  •         btn35.setType("click");  
  •         btn35.setKey("35");  
  •          
  •         ViewButton btn32 = new ViewButton();  
  •         btn32.setName("使用帮助");  
  •         btn32.setType("view");  
  •         btn32.setUrl("http://liufeng.gotoip2.com/xiaoqrobot/help.jsp");  
  •   
  •         ComplexButton mainBtn1 = new ComplexButton();  
  •         mainBtn1.setName("生活助手");  
  •         mainBtn1.setSub_button(new Button[] { btn11, btn12, btn13, btn14, btn15 });  
  •   
  •         ComplexButton mainBtn2 = new ComplexButton();  
  •         mainBtn2.setName("休闲驿站");  
  •         mainBtn2.setSub_button(new Button[] { btn21, btn22, btn23, btn24, btn25 });  
  •   
  •         ComplexButton mainBtn3 = new ComplexButton();  
  •         mainBtn3.setName("更多");  
  •         mainBtn3.setSub_button(new Button[] { btn31, btn33, btn34, btn35, btn32 });  
  •   
  •         /**
  •          * 这是公众号xiaoqrobot目前的菜单结构,每个一级菜单都有二级菜单项<br>
  •          *  
  •          * 在某个一级菜单下没有二级菜单的情况,menu该如何定义呢?<br>
  •          * 比如,第三个一级菜单项不是“更多体验”,而直接是“幽默笑话”,那么menu应该这样定义:<br>
  •          * menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 });
  •          */  
  •         Menu menu = new Menu();  
  •         menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });  
  •   
  •         return menu;  
  •     }  
  • }  

119~122行代码就是用于创建view类型菜单项的。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表