企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
前言: 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。 目前菜单创建的权限只有服务号或者是通过认证过的账号。未认证的订阅号暂不支持自定义   自定义菜单的账号样子如图: ![](https://box.kancloud.cn/2016-03-07_56dce48491c58.png)   【题外话】 这是我申请的测试号,里面有所有的接口权限,怎么申请看下图 ![](https://box.kancloud.cn/2016-03-07_56dce484b3aa5.jpg)   自定义菜单基本介绍: 目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。 目前自定义菜单接口可实现两种类型按钮,如下: ~~~ click: 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互; view: 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。 ~~~ **接口调用请求说明**   http请求方式:POST(请使用https协议) [https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN](https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN) **自定义菜单的请求是一个json格式的请求内容** **官网的请求示例** ~~~ { "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "type":"click", "name":"歌手简介", "key":"V1001_TODAY_SINGER" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"view", "name":"视频", "url":"http://v.qq.com/" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" }] }] } ~~~ **参数说明** ![](https://box.kancloud.cn/2016-03-07_56dce484cc486.jpg) **返回结果** 正确时的返回JSON数据包如下: ~~~ {"errcode":0,"errmsg":"ok"} ~~~ 错误时的返回JSON数据包如下(示例为无效菜单名长度): ~~~ {"errcode":40018,"errmsg":"invalid button name size"} ~~~ **通过json格式创建菜单**   ~~~ package com.ifp.weixin.biz.core.impl; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import org.springframework.stereotype.Service; import com.ifp.weixin.biz.core.MenuService; import com.ifp.weixin.util.WeixinUtil; @Service("menuService") public class MenuServiceImpl implements MenuService { public static Logger log = Logger.getLogger(MenuServiceImpl.class); // 菜单创建(POST) 限100(次/天) public static String MENU_CREATE = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; @Override public String CreateMenu(String jsonMenu) { String resultStr = ""; // 调用接口获取token String token = WeixinUtil.getToken(); if (token != null) { // 调用接口创建菜单 int result = createMenu(jsonMenu, token); // 判断菜单创建结果 if (0 == result) { resultStr = "菜单创建成功"; log.info(resultStr); } else { resultStr = "菜单创建失败,错误码:" + result; log.error(resultStr); } } return resultStr; } /** * 创建菜单 * * @param jsonMenu * 菜单的json格式 * @param accessToken * 有效的access_token * @return 0表示成功,其他值表示失败 */ public static int createMenu(String jsonMenu, String accessToken) { int result = 0; // 拼装创建菜单的url String url = MENU_CREATE.replace("ACCESS_TOKEN", accessToken); // 调用接口创建菜单 JSONObject jsonObject = WeixinUtil.httpRequest(url, "POST", jsonMenu); if (null != jsonObject) { if (0 != jsonObject.getInt("errcode")) { result = jsonObject.getInt("errcode"); log.error("创建菜单失败 errcode:" + jsonObject.getInt("errcode") + ",errmsg:" + jsonObject.getString("errmsg")); } } return result; } public static void main(String[] args) { // 这是一个符合菜单的json格式,“\”是转义符 String jsonMenu = "{\"button\":[{\"name\":\"生活助手\",\"sub_button\":[{\"key\":\"11\",\"name\":\"天气预报\",\"type\":\"click\"},{\"key\":\"12\",\"name\":\"公交查询\",\"type\":\"click\"}]},{\"name\":\"音智达\",\"sub_button\":[{\"key\":\"21\",\"name\":\"好东西哦\",\"type\":\"click\"},{\"key\":\"22\",\"name\":\"人脸识别\",\"type\":\"click\"}]},{\"name\":\"更多体验\",\"sub_button\":[{\"key\":\"33\",\"name\":\"幽默笑话\",\"type\":\"click\"},{\"name\":\"View类型的\",\"type\":\"view\",\"url\":\"http://m.baidu.com\"}]}]}"; MenuServiceImpl impl = new MenuServiceImpl(); impl.CreateMenu(jsonMenu); } } ~~~ ok,运行main方法后,菜单就创建好了, 由于微信会缓存菜单24小时,建议先取消关注,再关注,菜单就会显示出来了。 (ps:也可以建立菜单实体类,再由实体类转换成json,也可以实现创建菜单, 我直接用json,是因为第一:简单,第二:我会开发后台管理系统,要在后台管理菜单,传json方便)   可加我的微信公众号一起讨论 微信公众号:andedaohang 或扫描二维码 ![](https://box.kancloud.cn/2016-03-07_56dce482f16c7.jpg) 转载请注明出处:[http://blog.csdn.net/tuposky/article/details/40589321](http://blog.csdn.net/tuposky/article/details/40589321) [![](https://box.kancloud.cn/2016-03-07_56dce484f0a74.png "点击查看原始大小图片")](http://dl2.iteye.com/upload/attachment/0093/9846/d7166996-a67c-3544-af97-39cd1c41377e.png) 大小: 117.7 KB [![](https://box.kancloud.cn/2016-03-07_56dce4851112c.jpg "点击查看原始大小图片")](http://dl2.iteye.com/upload/attachment/0093/9856/0d7ffb76-6085-35a6-9129-3e13f165a798.jpg) 大小: 61.8 KB [![](https://box.kancloud.cn/2016-03-07_56dce485211b2.jpg "点击查看原始大小图片")](http://dl2.iteye.com/upload/attachment/0093/9863/805c8549-b2fb-3cca-96be-349400e30281.jpg) 大小: 48.3 KB [查看图片附件](#)