使用Java語言開發微信公眾平台(八)——自定義菜單功能


  隨着上一篇文章的結束,我們已經實現了所有消息的類型的回復功能。今天,我們來學習更加高大上,也更加重要的自定義菜單功能。

  、了解自定義菜單

  自定義菜單是微信公眾平台最常用也是最重要的功能之一。根據微信平台要求,自定義自定義菜單最多包括3個一級菜單,每個一級菜單最多包含5個二級菜單。其中一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以“...”代替。

  而自定義菜單可以實現的功能也是多種多樣的,根據實現功能的不同,微信自定義菜單按鈕共分為10種類型:

  請注意,3到8的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點擊后將沒有回應,開發者也不能正常接收到事件推送。9和10,是專門給第三方平台旗下未微信認證(具體而言,是資質認證未通過)的訂閱號准備的事件類型,它們是沒有事件推送的,能力相對受限,其他類型的公眾號不必使用。

  、了解自定義菜單的數據結構

  自定義菜單與之前消息回復的XML結構不同,自定義菜單選擇時候的是我們更加熟悉的JSON數據結構,官方給出的JSON數據Demo如下:

{

     "button":[

     {

          "type":"click",

          "name":"今日歌曲",

          "key":"V1001_TODAY_MUSIC"

      },

      {

           "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"

            }]

       }]

 }

  稍微解釋一下,微信公眾平台的定義菜單類型雖然非常之多。但是總結歸納一共有兩大類,分別是click類型(點擊觸發關鍵字key)的和view類型(點擊跳轉URL)的。了解了基本的規則后,我們來看一下詳細的參數解釋:

  稍微思考一下,根據這個JSON結構,我們需要怎樣去封裝實體類呢?

  自定義菜單實體類的封裝

  根據上述解釋,我們知道菜單類型有兩種:click類型、view類型。那么我們便需要clickButton類、viewButton類。而所有菜單共有屬性,我們又需要一個Button類作為父類。這樣我們才能組裝好一個Button,那么多個按鈕組裝成的菜單,我們又需要一個Menu類。最終我們總結出來,需要四個類的支持才能完成菜單實體的封裝:

  每一個類的屬性類型如下:

  ① Button類

  ② ClickButton類

  ③ ViewButton類

  ④ Menu類

  、編寫組裝菜單方法

  實體類組裝完畢后,我們進組WeiXinUtil類,編寫自定義菜單的組裝方法:

/**

 * 組裝菜單

 * @return

 */

public static Menu initMenu(){

Menu menu = new Menu();

ClickButton button11 = new ClickButton();

button11.setName("了解傑瑞教育");

button11.setType("click");

button11.setKey("11");

 

ClickButton button12 = new ClickButton();

button12.setName("加入傑瑞教育");

button12.setType("click");

button12.setKey("12");

 

ViewButton button21 = new ViewButton();

button21.setName("傑瑞教育官網");

button21.setType("view");

button21.setUrl("http://www.jerehedu.com");

 

ViewButton button22 = new ViewButton();

button22.setName("傑瑞教育新聞網");

button22.setType("view");

button22.setUrl("http://www.jredu100.com");

 

ClickButton button31 = new ClickButton();

button31.setName("傑小瑞");

button31.setType("click");

button31.setKey("31");

 

Button button1 = new Button();

button1.setName("傑瑞教育"); //將11/12兩個button作為二級菜單封裝第一個一級菜單

button1.setSub_button(new Button[]{button11,button12});

 

Button button2 = new Button();

button2.setName("相關網址"); //將21/22兩個button作為二級菜單封裝第二個二級菜單

button2.setSub_button(new Button[]{button11,button12});

 

menu.setButton(new Button[]{button1,button2,button31});// 將31Button直接作為一級菜單

return menu;

}

  、調用接口生成菜單

    菜單組裝完成后,我們需調用官方提供的接口,將自定義菜單發布到微信平台

  由於我們直接已經寫好doPost方式調用接口的方法,所以直接編寫方法調用接口即可:

  public static int createMenu(String token,String menu) throws ClientProtocolException, IOException {

    int result = 0;

    String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);

    JSONObject jsonObject = doPostStr(url, menu);

    if(jsonObject != null){

      result = jsonObject.getInt("errcode");

    }

    return result;

   }

   其中,我們返回errcode,可以判斷創建是否成功:

  、測試類調用方法生成菜單

    完成上述各種功能后,回到我們的測試類,調用方法:

  public static void main(String[] args) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException {

    AccessToken token = WeiXinUtil.getAccessToken();

    System.out.println("Access_Token為:"+token.getToken());

    System.out.println("有效時間為:"+token.getExpiresIn());

    String menu = JSONObject.fromObject(WeiXinUtil.initMenu()).toString();

    int result = WeiXinUtil.createMenu(token.getToken(), menu);

    if(result==0){

      System.out.println("菜單創建成功!");

    }else{

      System.out.println("菜單創建失敗");

    }

   }

  看到控制台結果:

  愉快的看了看手機,效果如下(當然現在只完成展示,還未做點擊事件操作):

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM