
前言:
自定义菜单可以帮助公共帐户丰富界面微信java开发,使用户可以更好,更快地了解公共帐户的功能.
当前,菜单创建的权限仅是服务编号或已通过身份验证的帐户. 未经身份验证的订阅号尚不支持自定义
自定义菜单的帐户如下所示:

[题外话]
这是我申请的测试编号,具有所有界面权限,如何申请,请参见下图


自定义菜单的基本介绍:
当前,自定义菜单最多包含3个第一级菜单,每个第一级菜单最多包含5个第二级菜单. 一级菜单最多4个汉字,二级菜单最多7个汉字. 多余的部分将被替换为“ ...”. 请注意,创建自定义菜单后,由于微信客户端缓存,微信客户端需要24小时才能显示. 建议您尝试取消关注公共帐户,然后在测试过程中再次关注,创建后即可看到效果.
当前,自定义菜单界面可以实现两种类型的按钮,如下所示:
click: 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互; view: 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。
接口呼叫请求说明
http请求方法: POST(请使用https协议)

自定义菜单请求是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"
}]
}]
}
参数说明

返回结果
正确时返回的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);
}
}
好,运行main方法后,创建菜单,
由于微信会将菜单缓存了24小时,因此建议您先取消关注,然后再跟随,系统就会显示菜单.

(ps: 您还可以创建菜单实体类,然后将实体类转换为json,还可以创建菜单,
我直接使用json是因为第一个: 简单,第二个: 我将开发一个后台管理系统,以在后台管理菜单,方便传递json)
可以添加我的微信公众号一起讨论
微信公众号: andedaohang
或扫描QR码

我所有的博客都已移至csdn,将来所有博客都将在csdn上进行更新微信java开发,
CSDN博客地址:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-193814-1.html
我们为了我们岛礁人员和财产的安全是不是应该扩大南沙岛礁建设的规模及思路