1. 程式人生 > >Java微信公眾平臺開發(十)--微信自定義選單的建立實現

Java微信公眾平臺開發(十)--微信自定義選單的建立實現

轉自:http://www.cuiyongzhi.com/post/48.html

自定義選單這個功能在我們普通的編輯模式下是可以直接在後臺編輯的,但是一旦我們進入開發模式之後我們的自定義選單就需要自己用程式碼實現,所以對於剛開始接觸的人來說可能存在一定的疑惑,這裡我說下平時我們在開發模式下常用的兩種自定義選單的實現方式:①不用寫實現程式碼,直接用網頁測試工具Post json字串生成選單;②就是在我們的開發中用程式碼實現選單生成!(參考文件:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html  )在自定義選單中選單的型別分為兩種,一種為view的檢視選單,點選之後直接跳轉到url頁面;還有一種是click型別的點選型,後端通過點選事件型別給與不同的相應;後面新增了各種特色功能的選單其本質都還是Click型別的選單,所以生成的規則都是一樣的,其生成選單的方式都是向微信伺服器post json字串生成選單,下面講述選單生成的方法和規則!

(一)使用網頁除錯工具生成選單

我們通過連線(https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/create  )進入到網頁除錯工具,如下圖:

1.png

在這裡我們生成選單的時候只需要我們賬號的有效token和json字串即可,這裡的json字串可以參照文件中的案例做出修改得到,我這裡給出的一個案例如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 {      "button": [          {              "name": "部落格",               "type": "view",               "url": "http://www.cuiyongzhi.com"          },           {              "name": "選單",               "sub_button": [                  {                      "key": "text",                       "name": "回覆圖文",                       "type": "click"                  },                   {                      "name": "部落格",                       "type": "view",                       "url": "http://www.cuiyongzhi.com"                  }              ]          },           {              "key": "text",               "name": "回覆圖文",               "type": "click"          }      ] }

我們填入響應的token,點選檢查問題如果返回結果Ok就可以了,如下:

3.png

到這裡我們採用web測試工具生成選單的方式就完成了,下面接著介紹用程式碼生成選單!

(二)採用程式碼實現選單的生成

前面我們有說道在選單中有view和click兩種型別的事件,這裡我們首先在程式碼中建立兩種型別對應的java實體,view型別建立實體ViewButton.java如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package  com.cuiyongzhi.wechat.menu;   /**   * ClassName: ViewButton   * @Description: 檢視型選單事件   * @author dapengniao   * @date 2016年3月14日 下午5:31:38   */ public  class  ViewButton {      private  String type;      private  String name;      private  String url;        public  String getType() {          return  type;      }        public  void  setType(String type) {          this .type = type;      }        public  String getName() {          return  name;      }        public  void  setName(String name) {          this .name = name;      }        public  String getUrl() {          return  url;      }        public  void  setUrl(String url) {          this .url = url;      }   }

同樣的建立click的實體ClickButton.java如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package  com.cuiyongzhi.wechat.menu;   /**   * ClassName: ClickButton   * @Description: 點選型選單事件   * @author dapengniao   * @date 2016年3月14日 下午5:31:50   */ public  class  ClickButton {      private  String type;      private  String name;      private  String key;        public  String getType() {          return  type;      }        public  void  setType(String type) {          this .type = type;      }        public  String getName() {          return  name;      }        public  void  setName(String name) {          this .name = name;      }        public  String getKey() {          return  key;      }        public  void  setKey(String key) {          this .key = key;      }   }

這裡建立兩個實體也是為了方便我們在自定義選單中對json的封裝,在這裡我用程式碼的形式封裝了上面給出的同樣的json格式,並呼叫生成自定義選單的介面傳送到微信伺服器,簡單程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package  com.cuiyongzhi.wechat.menu;   import  com.alibaba.fastjson.JSONObject; import  com.cuiyongzhi.wechat.util.HttpUtils;   import  net.sf.json.JSONArray;   public  class  MenuMain {        public  static  void  main(String[] args) {                ClickButton cbt= new  ClickButton();          cbt.setKey( "image" );          cbt.setName( "回覆圖片" );          cbt.setType( "click" );                              ViewButton vbt= new  ViewButton();          vbt.setUrl( "http://www.cuiyongzhi.com" );          vbt.setName( "部落格" );          vbt.setType( "view" );                    JSONArray sub_button= new  JSONArray();          sub_button.add(cbt);          sub_button.add(vbt);                              JSONObject buttonOne= new  JSONObject();          buttonOne.put( "name" "選單" );          buttonOne.put( "sub_button" , sub_button);                    JSONArray button= new  JSONArray();          button.add(vbt);          button.add(buttonOne);          button.add(cbt);                    JSONObject menujson= new  JSONObject();          menujson.put( "button" , button);          System.out.println(menujson);          //這裡為請求介面的url   +號後面的是token,這裡就不做過多對token獲取的方法解釋          String url= "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + "upeDW-2pWrHgLx3fGqgsvAvf-HkQBA--5uHOo9OW16uNdL9zNPnnuIN01UDFXh_5d-QdcnBxux9tXigFwm1z0SInbdkXEKa1pMhTqaZVxK7sCPj7421YQGI0v3evwiwiWALjAHASWH" ;                    try {              String rs=HttpUtils.sendPostBuffer(url, menujson.toJSONString());              System.out.println(rs);          } catch (Exception e){              System.out.println( "請求錯誤!" );          }            }   }

上面程式碼的基本流程就是呼叫view和click兩個實體封裝json字串menujson,最後呼叫傳送方法將json傳送給騰訊伺服器,但是這裡需要用到賬號生成的token,我這裡是直接寫死的(token的獲取方式可以參見http://www.cuiyongzhi.com/?id=44  ),最終執行返回結果ok即可,如下:

4.png

自定義選單的功能實現基本就是這些,下一篇將講述【微信公眾平臺(map.weixin.qq.com)/開放平臺(open.weixin.qq.com)/商戶平臺(pay.weixin.qq.com)之間的關聯關係】希望可以對你給出幫助,感謝你的翻閱,如有疑問可以留言討論!