5.6.5 创建自定义菜单

接下来,需要根据表5-4中的网址数据创建菜单,将3个分类(技术交流、购物和网页游戏)作为一级菜单,将10个网站名称作为二级菜单。我们在项目中新建一个菜单管理器类MenuManager,该类的代码如下:

  1. package org.liufeng.weixin.main;
  2.  
  3. import org.liufeng.course.menu.Button;
  4. import org.liufeng.course.menu.ClickButton;
  5. import org.liufeng.course.menu.ComplexButton;
  6. import org.liufeng.course.menu.Menu;
  7. import org.liufeng.course.menu.ViewButton;
  8. import org.liufeng.course.pojo.Token;
  9. import org.liufeng.course.util.CommonUtil;
  10. import org.liufeng.course.util.MenuUtil;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13.  
  14. /**
  15. * 菜单管理器类
  16. *
  17. * @author liufeng
  18. * @date 2013-10-17
  19. */
  20. public class MenuManager {
  21. private static Logger log = LoggerFactory.getLogger(MenuManager.class);
  22.  
  23. /**
  24. * 定义菜单结构
  25. *
  26. * @return
  27. */
  28. private static Menu getMenu() {
  29. ClickButton btn11 = new ClickButton();
  30. btn11.setName("开源中国");
  31. btn11.setType("click");
  32. btn11.setKey("oschina");
  33.  
  34. ClickButton btn12 = new ClickButton();
  35. btn12.setName("ITeye");
  36. btn12.setType("click");
  37. btn12.setKey("iteye");
  38.  
  39. ViewButton btn13 = new ViewButton();
  40. btn13.setName("CocoaChina");
  41. btn13.setType("view");
  42. btn13.setUrl("http:// www.iteye.com");
  43.  
  44. ViewButton btn21 = new ViewButton();
  45. btn21.setName("淘宝");
  46. btn21.setType("view");
  47. btn21.setUrl("http:// m.taobao.com");
  48.  
  49. ViewButton btn22 = new ViewButton();
  50. btn22.setName("京东");
  51. btn22.setType("view");
  52. btn22.setUrl("http:// m.jd.com");
  53.  
  54. ViewButton btn23 = new ViewButton();
  55. btn23.setName("唯品会");
  56. btn23.setType("view");
  57. btn23.setUrl("http:// m.vipshop.com");
  58.  
  59. ViewButton btn24 = new ViewButton();
  60. btn24.setName("当当网");
  61. btn24.setType("view");
  62. btn24.setUrl("http:// m.dangdang.com");
  63.  
  64. ViewButton btn25 = new ViewButton();
  65. btn25.setName("苏宁易购");
  66. btn25.setType("view");
  67. btn25.setUrl("http:// m.suning.com");
  68.  
  69. ViewButton btn31 = new ViewButton();
  70. btn31.setName("多泡");
  71. btn31.setType("view");
  72. btn31.setUrl("http:// www.duopao.com");
  73.  
  74. ViewButton btn32 = new ViewButton();
  75. btn32.setName("一窝88");
  76. btn32.setType("view");
  77. btn32.setUrl("http:// www.yi588.com");
  78.  
  79. ComplexButton mainBtn1 = new ComplexButton();
  80. mainBtn1.setName("技术交流");
  81. mainBtn1.setSub_button(new Button[] { btn11, btn12, btn13 });
  82.  
  83. ComplexButton mainBtn2 = new ComplexButton();
  84. mainBtn2.setName("购物");
  85. mainBtn2.setSub_button(new Button[] { btn21, btn22, btn23, btn24, btn25 });
  86.  
  87. ComplexButton mainBtn3 = new ComplexButton();
  88. mainBtn3.setName("网页游戏");
  89. mainBtn3.setSub_button(new Button[] { btn31, btn32 });
  90.  
  91. Menu menu = new Menu();
  92. menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });
  93.  
  94. return menu;
  95. }
  96.  
  97. public static void main(String[] args) {
  98. // 第三方用户唯一凭证
  99. String appId = "000000000000000000";
  100. // 第三方用户唯一凭证密钥
  101. String appSecret = "11111111111111111111111111111111";
  102.  
  103. // 调用接口获取凭证
  104. Token token = CommonUtil.getToken(appId, appSecret);
  105.  
  106. if (null != token) {
  107. // 创建菜单
  108. boolean result = MenuUtil.createMenu(getMenu(), token.getAccessToken());
  109.  
  110. // 判断菜单创建结果
  111. if (result)
  112. log.info("菜单创建成功!");
  113. else
  114. log.info("菜单创建失败!");
  115. }
  116. }
  117. }

在MenuManager类中,先通过getMenu()方法定义菜单结构,然后在main()方法中创建菜单。我们在MyEclipse中直接运行MenuManager类就能完成菜单的创建,在运行之前读者需要将代码中的appid和appSecret替换成自己的。菜单创建成功时,将会在MyEclipse控制台显示如图5-3所示的提示信息。

此时,重新关注公众账号,就能在手机上看到菜单效果,如图5-4所示。

5.6.5 创建自定义菜单 - 图1

图5-3 菜单创建成功时的提示信息(左)

图5-4 在手机上看到的菜单效果(右)