Java - 微信公众号 - 自定义菜单栏
事先声明:自定义菜单这块我把它独立出来了,当然,这毕竟只是个测试
1、首先需要在上一篇(消息回复)的工具类WeixinUtil当中添加创建菜单的方法
/** * 创建菜单 * @param menu * @param accessToken * @return */ public static int createMenu(Menu menu, String accessToken) { String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; int result = 0; // 拼装创建菜单的url String url = menu_create_url.replace("ACCESS_TOKEN", accessToken); // 将菜单对象转换成json字符串 String jsonMenu = JSONObject.fromObject(menu).toString(); // 调用接口创建菜单 JSONObject jsonObject = httpRequest(url, "POST", jsonMenu); if (null != jsonObject) { if (0 != jsonObject.getInt("errcode")) { result = jsonObject.getInt("errcode"); log.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg")); } } return result; }
必要的实体类肯定不能少了,贴上、、贴上、、
/** * 整个菜单对象的封装 * @author xzl * */ public class Menu { private Button[] button; public Button[] getButton() { return button; } public void setButton(Button[] button) { this.button = button; } }
/** * 菜单项的基类 * @author xzl * */ public class Button { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
/** * 是一级菜单还是二级菜单就看你如何封装菜单 * @author xzl * */ public class CommonButton extends Button { private String type; private String key; private String url; 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; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
/** * 顶级菜单 :含有菜单子项 * @author xzl * */ 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 MenuCreate { private static Logger log = LoggerFactory.getLogger(MenuCreate.class); private static final String appid = "wx7b43df48d97fab9d"; private static final String appSecret = "5a91fcdb64e379856b2a7b3c67a9cb90"; public static void main(String[] args) { // 调用接口获取access_token AccessToken at = WeixinUtil.getAccessToken(appid, appSecret); if (null != at) { // 调用接口创建菜单 int result = WeixinUtil.createMenu(getMenu(), at.getAccessToken()); // 判断菜单创建结果 if (0 == result) { System.out.println("菜单创建成功!"); log.info("菜单创建成功!"); } else { System.out.println("菜单创建失败,错误码:" + result); log.info("菜单创建失败,错误码:" + result); } }else{ System.out.println("获取token失败!"); log.info("获取token失败!"); } } /** * 组装菜单数据 * * @return */ private static Menu getMenu() { CommonButton btn1 = new CommonButton(); btn1.setName("博客园"); btn1.setType("view"); btn1.setUrl("http://www.cnblogs.com/x-99/"); CommonButton btn2 = new CommonButton(); btn2.setName("我的博客"); btn2.setType("view"); btn2.setUrl("http://www.cnblogs.com/x-99/"); CommonButton btn3 = new CommonButton(); btn3.setName("个人中心"); btn3.setType("view"); btn3.setUrl("http://www.cnblogs.com/x-99/"); CommonButton btn4 = new CommonButton(); btn4.setName("人工服务"); btn4.setType("view"); btn4.setUrl("http://www.cnblogs.com/x-99/"); CommonButton btn5 = new CommonButton(); btn5.setName("附近美食"); btn5.setType("click"); btn5.setKey("23"); CommonButton btn6 = new CommonButton(); btn6.setName("周边住宿"); btn6.setType("click"); btn6.setKey("24"); ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("博客概况"); mainBtn1.setSub_button(new CommonButton[] { btn2, btn3, btn4 }); ComplexButton mainBtn2 = new ComplexButton(); mainBtn2.setName("周边服务"); mainBtn2.setSub_button(new CommonButton[] { btn5, btn6 }); /** * 封装整个菜单 */ Menu menu = new Menu(); menu.setButton(new Button[] { btn1, mainBtn1, mainBtn2 }); return menu; } }
如果你确认你的appid和appSecret没有填错的话,应该就没有什么太大的问题了
以上就是我对自定义菜单的理解,希望可以帮到大家。。。
浙公网安备 33010602011771号