前言:
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。
目前菜单创建的权限只有服务号或者是通过认证过的账号。未认证的订阅号暂不支持自定义
自定义菜单的账号样子如图:
【题外话】
这是我申请的测试号,里面有所有的接口权限,怎么申请看下图
自定义菜单基本介绍:
目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
目前自定义菜单接口可实现两种类型按钮,如下:
click:用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;view:用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值(即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。
接口调用请求说明
http请求方式:POST(请使用https协议)https://api./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":"/"},{"type":"view","name":"视频","url":"/"},{"type":"click","name":"赞一下我们","key":"V1001_GOOD"}]}]}
参数说明
返回结果
正确时的返回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./cgi-bin/menu/create?access_token=ACCESS_TOKEN";@Overridepublic String CreateMenu(String jsonMenu) {String resultStr = "";// 调用接口获取tokenString 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;// 拼装创建菜单的urlString 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\":\"\"}]}]}";MenuServiceImpl impl = new MenuServiceImpl();impl.CreateMenu(jsonMenu);}}
ok,运行main方法后,菜单就创建好了,
由于微信会缓存菜单24小时,建议先取消关注,再关注,菜单就会显示出来了。
(ps:也可以建立菜单实体类,再由实体类转换成json,也可以实现创建菜单,
我直接用json,是因为第一:简单,第二:我会开发后台管理系统,要在后台管理菜单,传json方便)
可加我的微信公众号一起讨论
转载请注明出处:/tuposky/article/details/40589321
如果觉得《微信公众平台开发教程Java版(五) 自定义菜单创建》对你有帮助,请点赞、收藏,并留下你的观点哦!