前言:
1,目前公众号类型分为两种:服务号和订阅号(服务号主要面向企业、*和其他组织,而订阅号主要面向媒体和个人)
区别:只有服务号可以申请自定义菜单;服务号每月只能群发四条消息,而订阅号每天能群发一条消息
2,如果开发者想通过HTTP请求访问公众平台的接口,就必须要有访问凭证,也就是access_token(方法在第二章)
3,菜单数量为3(一级)*5(二级)
正文:
我是发送消息到微信,判定如果是“menu”(随便什么都可以)则触发更新菜单(消息的发送和接收第四章会讲到)
1,对菜单结构的封装 最终提交的json格式菜单数据应该是由对象直接转换得到,而不是在程序代码中拼一大堆json数据
菜单项的基类(所有一级菜单、二级菜单都共有一个相同的属性,那就是name)
public class Button { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
子菜单项的封装(有可能是二级菜单项,也有可能是不含二级菜单的一级菜单)
//click类型
public class CommonButton extends Button { private String type; private String key; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }
//view类型
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; } }
父菜单项(包含有二级菜单项的一级菜单)
public class ComplexButton extends Button { private Button[] sub_button; public Button[] getSub_button() { return sub_button; } public void setSub_button(Button[] sub_button) { this.sub_button = sub_button; } }
整个菜单对象的封装
public class Menu { private Button[] button; public Button[] getButton() { return button; } public void setButton(Button[] button) { this.button = button; } }
2,生成菜单 主要介绍click和view,其他类型还没接触到
public static String menuManager() { String respContent = "";//返回到微信的消息 String access_token = WeixinUtil.getAccessToken(Config.fileName, Config.appId(), Config.appSecret());// 调用接口获取access_token if (!StringUtils.isEmpty(access_token)) { // 调用接口创建菜单 int result = WeixinUtil.createMenu(getMenu(), access_token); // 判断菜单创建结果 if (0 == result){ respContent = "爱关节网菜单创建成功!"; }else{ respContent = "爱关节网菜单创建失败,错误码:" + result; } } return respContent; }
//组装菜单数据 private static Menu getMenu() { ViewButton btn11 = new ViewButton(); btn11.setName("测试view类型"); btn11.setType("view"); btn11.setUrl("https://www.ceshi.com/"); 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 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 btn32 = new CommonButton(); btn32.setName("电影排行榜"); btn32.setType("click"); btn32.setKey("32"); CommonButton btn33 = new CommonButton(); btn33.setName("幽默笑话"); btn33.setType("click"); btn33.setKey("33"); ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("生活助手"); mainBtn1.setSub_button(new Button[] { btn11, btn12, btn13, btn14 }); 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, btn32, btn33 }); /** * 这个公众号目前的菜单结构,每个一级菜单都有二级菜单项 * * 在某个一级菜单下没有二级菜单的情况,menu该如何定义呢? * 比如,第三个一级菜单项不是“更多体验”,而直接是“幽默笑话”,那么menu应该这样定义 * menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 }); */ Menu menu = new Menu(); menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 }); return menu; } }