微信測試號開發之五 自定義菜單

 

 

注意:java

一、自定義菜單最多包括3個一級菜單,每一個一級菜單最多包含5個二級菜單。spring

二、一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以「...」代替。json

三、測試時能夠嘗試取消關注公衆帳號後再次關注,則能夠看到建立後的效果。api

 

按鈕類型:數組

一、click:點擊推事件用戶點擊click類型按鈕後,微信服務器會經過消息接口推送消息類型爲event的結構給開發者(參考消息接口指南),而且帶上按鈕中開發者填寫的key值,開發者能夠經過自定義的key值與用戶進行交互;
二、view:跳轉URL用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁受權獲取用戶基本信息接口結合,得到用戶基本信息。服務器

建立菜單接口:微信

http請求方式:POST(請使用https協議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKENapp

click和view類型按鈕的請求數據格式以下:jsp

 

{
     "button":[
     {
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜單",
           "sub_button":[
           {
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
                 "type":"miniprogram",
                 "name":"wxa",
                 "url":"http://mp.weixin.qq.com",
                 "appid":"wx286b93c14bbf93aa",
                 "pagepath":"pages/lunar/index"
             },
            {
               "type":"click",
               "name":"贊一下咱們",
               "key":"V1001_GOOD"
            }]
       }]
 }ide

 

 

進行開發:

(一):封裝按鈕對象

 

一:基類

[java] view plain copy
  1. public class Button {  
  2.   
  3.   private String name;//全部一級菜單、二級菜單都共有一個相同的屬性,那就是name  
  4.   
  5.   
  6.    public String getName() {  
  7.        return name;  
  8.    }  
  9.   
  10.   
  11.    public void setName(String name) {  
  12.        this.name = name;  
  13.    }  
  14.   
  15.   
  16. }  



二:子菜單類

[java] view plain copy
  1. /** 
  2. * 描述: 子菜單項 :沒有子菜單的菜單項,有多是二級菜單項,也有多是不含二級菜單的一級菜單。 
  3.  */  
  4. public class CommonButton extends Button {  
  5.       
  6.     private String type;  
  7.     private String key;  
  8.     private String url;  
  9.   
  10.   
  11.     public String getType() {  
  12.         return type;  
  13.     }  
  14.   
  15.   
  16.     public void setType(String type) {  
  17.         this.type = type;  
  18.     }  
  19.   
  20.   
  21.     public String getKey() {  
  22.         return key;  
  23.     }  
  24.   
  25.   
  26.     public void setKey(String key) {  
  27.         this.key = key;  
  28.     }  
  29.   
  30.   
  31. public String getUrl() {  
  32. return url;  
  33. }  
  34.   
  35.   
  36. public void setUrl(String url) {  
  37. this.url = url;  
  38. }  
  39.       
  40.       
  41. }  

 

三:父菜單類

 

[java] view plain copy
  1. /** 
  2. * 描述: 父菜單項 :包含有二級菜單項的一級菜單。這類菜單項包含有二個屬性:name和sub_button,而sub_button以是一個子菜單項數組  
  3.  */  
  4. public class ComplexButton extends Button {  
  5.     private Button[] sub_button;  
  6.   
  7.   
  8.     public Button[] getSub_button() {  
  9.         return sub_button;  
  10.     }  
  11.   
  12.   
  13.     public void setSub_button(Button[] sub_button) {  
  14.         this.sub_button = sub_button;  
  15.     }  
  16. }  

 

 

(二):封裝生成菜單的方法

 

[java] view plain copy
  1. import com.fasterxml.jackson.databind.JsonNode;  
  2. import com.fasterxml.jackson.databind.ObjectMapper;  
  3. import com.mote.weixin.entry.Menu;  
  4.   
  5.   
  6. public class MenuUtils {  
  7.   
  8.     private static ObjectMapper MAPPER = new ObjectMapper();  
  9.       
  10.       
  11.     public static int createMenu(Menu menu, String accessToken) throws Exception {  
  12.         int result = 0;  
  13.         // 拼裝建立菜單的url  
  14.         String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+accessToken+"";  
  15.         // 將菜單對象轉換成json字符串  
  16.         String jsonMenu = MAPPER.writeValueAsString(menu);  
  17.         // 調用接口建立菜單,CommonUtils是上一篇中介紹的內容  
  18.         String resq = CommonUtils.Post_Json(url, jsonMenu);  
  19.           
  20.         JsonNode tree = MAPPER.readTree(resq);  
  21.         if(tree.get("errcode").toString().equals("0")){  
  22.         System.out.println("菜單建立成功!");  
  23.         }else{  
  24.         System.out.println("菜單建立失敗!");  
  25.         }  
  26.   
  27.         return result;  
  28.     }  
  29. }  



 

(三):組裝數據,生成菜單

[java] view plain copy
  1. import org.springframework.stereotype.Controller;  
  2.   
  3.   
  4. import com.mote.weixin.entry.Button;  
  5. import com.mote.weixin.entry.CommonButton;  
  6. import com.mote.weixin.entry.ComplexButton;  
  7. import com.mote.weixin.entry.Menu;  
  8. import com.mote.weixin.utils.CommonUtils;  
  9. import com.mote.weixin.utils.MenuUtils;  
  10.   
  11.   
  12. @Controller  
  13. public class MenuController {  
  14.   
  15. public static void main(String[] args) {  
  16.   
  17.   
  18. try {  
  19. // 調用接口獲取access_token,CommonUtils是上一篇中的內容  
  20. String accessToken = CommonUtils.getAccessToken();  
  21. // 調用接口建立菜單  
  22. MenuUtils.createMenu(getMenu(), accessToken);  
  23. } catch (Exception e) {  
  24. System.out.println("菜單建立失敗");  
  25. e.printStackTrace();  
  26. }  
  27.   
  28.   
  29. }  
  30.   
  31.   
  32. /** 
  33. * 組裝菜單數據 
  34. *  
  35. * @return 
  36. */  
  37. private static Menu getMenu() {  
  38.   
  39.   
  40. CommonButton btn11 = new CommonButton();  
  41. btn11.setName("校園導航");  
  42. btn11.setType("view");  
  43. btn11.setUrl("http://02d73f21.ngrok.io/wx_coges/navi.jsp");  
  44.   
  45.   
  46. CommonButton btn21 = new CommonButton();  
  47. btn21.setName("學校風采");  
  48. btn21.setType("view");  
  49. btn21.setKey("21");  
  50. btn21.setUrl("https://www.baidu.com/");  
  51.   
  52.   
  53. CommonButton btn31 = new CommonButton();  
  54. btn31.setName("健身服務");  
  55. btn31.setType("click");  
  56. btn31.setKey("31");  
  57.   
  58.   
  59. CommonButton btn32 = new CommonButton();  
  60. btn32.setName("愛情諮詢");  
  61. btn32.setType("click");  
  62. btn32.setKey("32");  
  63.   
  64.   
  65. /** 
  66. * 微信: mainBtn2,mainBtn3底部的三個一級菜單 
  67. */  
  68.   
  69.   
  70. ComplexButton mainBtn3 = new ComplexButton();  
  71. mainBtn3.setName("更多服務");  
  72. mainBtn3.setSub_button(new CommonButton[] { btn31, btn32});  
  73.   
  74.   
  75. /** 
  76. * 封裝整個菜單 
  77. */  
  78. Menu menu = new Menu();  
  79. menu.setButton(new Button[] { btn11, btn21, mainBtn3 });  
  80.   
  81.   
  82. return menu;  
  83. }  
  84.   
  85.   
  86. }  



ok了,直接執行main方法就能夠生成菜單了,試試吧

 

 

 

 

 

原文做者:祈澈姑娘

相關文章
相關標籤/搜索