随着上一篇文章的结束,我们已经实现了所有消息的类型的回复功能。今天,我们来学习更加高大上,也更加重要的自定义菜单功能。

一、了解自定义菜单

自定义菜单是微信公众平台最常用也是最重要的功能之一。根据微信平台要求,自定义自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。其中一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。

而自定义菜单可以实现的功能也是多种多样的,根据实现功能的不同,微信自定义菜单按钮共分为10种类型:

请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。

二、了解自定义菜单的数据结构

自定义菜单与之前消息回复的XML结构不同,自定义菜单选择时候的是我们更加熟悉的JSON数据结构,官方给出的JSON数据Demo如下:

{

"button":[

{

"type":"click",

"name":"今日歌曲",

"key":"V1001_TODAY_MUSIC"

},

{

"name":"菜单",

"sub_button":[

{

"type":"view",

"name":"搜索",

},

{

"type":"view",

"name":"视频",

},

{

"type":"click",

"name":"赞一下我们",

"key":"V1001_GOOD"

}]

}]

}

稍微解释一下,微信公众平台的定义菜单类型虽然非常之多。但是总结归纳一共有两大类,分别是click类型(点击触发关键字key)的和view类型(点击跳转URL)的。了解了基本的规则后,我们来看一下详细的参数解释:

稍微思考一下,根据这个JSON结构,我们需要怎样去封装实体类呢?

二、自定义菜单实体类的封装

根据上述解释,我们知道菜单类型有两种:click类型、view类型。那么我们便需要clickButton类、viewButton类。而所有菜单共有属性,我们又需要一个Button类作为父类。这样我们才能组装好一个Button,那么多个按钮组装成的菜单,我们又需要一个Menu类。最终我们总结出来,需要四个类的支持才能完成菜单实体的封装:

每一个类的属性类型如下:

① Button类

② ClickButton类

③ ViewButton类

④ Menu类

三、编写组装菜单方法

实体类组装完毕后,我们进组WeiXinUtil类,编写自定义菜单的组装方法:

/**

* 组装菜单

* @return

*/

public static Menu initMenu(){

Menu menu = new Menu();

ClickButton button11 = new ClickButton();

button11.setName("了解杰瑞教育");

button11.setType("click");

button11.setKey("11");

ClickButton button12 = new ClickButton();

button12.setName("加入杰瑞教育");

button12.setType("click");

button12.setKey("12");

ViewButton button21 = new ViewButton();

button21.setName("杰瑞教育官网");

button21.setType("view");

button21.setUrl("http://www.jerehedu.com");

ViewButton button22 = new ViewButton();

button22.setName("杰瑞教育新闻网");

button22.setType("view");

button22.setUrl("http://www.jredu100.com");

ClickButton button31 = new ClickButton();

button31.setName("杰小瑞");

button31.setType("click");

button31.setKey("31");

Button button1 = new Button();

button1.setName("杰瑞教育"); //将11/12两个button作为二级菜单封装第一个一级菜单

button1.setSub_button(new Button[]{button11,button12});

Button button2 = new Button();

button2.setName("相关网址"); //将21/22两个button作为二级菜单封装第二个二级菜单

button2.setSub_button(new Button[]{button11,button12});

menu.setButton(new Button[]{button1,button2,button31});// 将31Button直接作为一级菜单

return menu;

}

四、调用接口生成菜单

菜单组装完成后,我们需调用官方提供的接口,将自定义菜单发布到微信平台

由于我们直接已经写好doPost方式调用接口的方法,所以直接编写方法调用接口即可:

public static int createMenu(String token,String menu) throws ClientProtocolException, IOException {

int result = 0;

String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);

JSONObject jsonObject = doPostStr(url, menu);

if(jsonObject != null){

result = jsonObject.getInt("errcode");

}

return result;

}

其中,我们返回errcode,可以判断创建是否成功:

五、测试类调用方法生成菜单

完成上述各种功能后,回到我们的测试类,调用方法:

public static void main(String[] args) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException {

AccessToken token = WeiXinUtil.getAccessToken();

System.out.println("Access_Token为:"+token.getToken());

System.out.println("有效时间为:"+token.getExpiresIn());

String menu = JSONObject.fromObject(WeiXinUtil.initMenu()).toString();

int result = WeiXinUtil.createMenu(token.getToken(), menu);

if(result==0){

System.out.println("菜单创建成功!");

}else{

System.out.println("菜单创建失败");

}

}

看到控制台结果:

愉快的看了看手机,效果如下(当然现在只完成展示,还未做点击事件操作):

微信自定义菜单java_使用Java语言开发微信公众平台(八)——自定义菜单功能相关推荐

  1. java语言开发微信小程序(一)

    出于兴趣,自己用java搞了一次小程序,现在记录下来,就权当笔记吧.当然也希望能给看到这篇文章的同志一些帮助.这篇文章分两部分,这部分先介绍小程序开发的一些基础知识,包括需要做的准备.按照习惯,先贴一 ...

  2. 使用Java语言开发微信公众平台(三)——被关注回复与关键词回复

    在上一篇文章中,我们实现了文本消息的接收与响应.可以在用户发送任何内容的时候,回复一段固定的文字.本章节中,我们将对上一章节的代码进行适当的完善,同时实现[被关注回复与关键词回复]功能. 一.微信可提 ...

  3. java群发图文消息_使用Java语言开发微信公众平台(四)——图文消息的发送与响应...

    在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...

  4. 使用Java语言开发微信公众平台(五)——获取access_token

    在前四期的文章中,我们分别学习了"环境搭建与开发接入"."文本消息的接收与响应"."被关注回复与关键词回复"."图文消息的发送与响 ...

  5. 使用Java语言开发微信公众平台(六)

    在上一节课程中,我们来学习了微信公众平台最基础的一个接口--access_token,并且能够从微信公众平台中取到access_token. 那么,在本节课程中,我们要以上节课获取到的access_t ...

  6. 程序员的开发工具:Java语言开发人员常用软件

    我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华. 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦. 文章目录 一.前言 二.相关软件介绍: 1. IDEA(IntelliJ ID ...

  7. java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台

     详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘   ...

  8. DOS命令、Java语言开发环境(JVM、JDK、JRE)

    DOS命令: DOS是一个早期的操作系统(黑窗口),现在已经被Windows系统(图形化)取代,对于我们开发人员,目前需要在DOS中完成一些事情,Java语言的初学者,学习一些DOS命令,会非常有帮助 ...

  9. 小程序开发语言python_微信小程序是用什么语言开发的呢

    原标题:微信小程序是用什么语言开发的呢 说到微信小程序可能大部分只是一知半解,您是否清楚小程序是用什么来开发的?如果您不太清楚,那么多美源小程序小编来告诉您小程序开的具体. 微信小程序是什么语言开发的 ...

最新文章

  1. CF1173A 【Nauuo and Votes】题解
  2. Windows 8开机时间
  3. QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码
  4. 【Java】Java 对象头 真的是 32位 吗?
  5. extend the gridview control
  6. pygame-KidsCanCode系列jumpy-part6-主角挂掉重新开始
  7. [转载] Python数据分析之Matplotlib数据可视化实例
  8. 《零基础入门深度学习》解读
  9. Fragment+ViewPager+ButterKnife时控件会报空指针问题
  10. Shape数据上传至SDE数据库中,动态更新Mapservice的解决方案之一
  11. 初学Java必须知道的几件事
  12. C#调用Bing的在线翻译接口Translator
  13. Android8.0 Fingerprint指纹启动流程详细分析
  14. MindManager带你走进三顾茅庐
  15. Comparing Mongo DB and Couch DB
  16. TOM 163VIP邮箱怎么登录?163.net邮箱登录界面是什么?
  17. Qt:ui文件no member named actionXXX 解决方案
  18. 我的天空是灰色的......
  19. MySQL---DQL语言
  20. 电磁波的加上Mur吸收边界条件的FDTD算法

热门文章

  1. 使用XAML和SharpMap渲染一幅地图
  2. Lucene入门与使用(一) [转]
  3. UVA11917 Do Your Own Homework【map】
  4. Bailian2801 填词 POJ1629 ZOJ1546 Fillword【排序】
  5. CCF201312-1 出现次数最多的数(100分)
  6. gcc/g++ 使用 tricks
  7. IPython notebook(Jupyter Notebook) 的使用
  8. Tricks(二十)—— 从 N 个数中等概率地产生 M 个数
  9. 机器学习基础(十三)—— regularization validation
  10. Java 基础 —— Character 与 String