微信公衆號開發json
第二章 建立菜單服務器
備註:微信
一、自定義菜單最多包括3個一級菜單,每一個一級菜單最多包含5個二級菜單。工具
二、一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以「...」代替。測試
三、建立自定義菜單後,菜單的刷新策略是,在用戶進入公衆號會話頁或公衆號profile頁時,如 果發現上一次拉取菜單的請求在5分鐘之前,就會拉取一下菜單,若是菜單有更新,就會刷新客戶端的菜單。測試時能夠嘗試取消關注公衆帳號後再次關注,則能夠看到建立後的效果。網站
菜單按鈕類型:(key值爲click等點擊類型必須,url爲view類型必須)url
1、click:點擊推事件用戶點擊click類型按鈕後,微信服務器會經過消息接口推送消息類型爲event的結構給開發者(參考消息接口指南),而且帶上按鈕中開發者填寫的key值,開發者能夠經過自定義的key值與用戶進行交互;spa
2、view:跳轉URL用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁受權獲取用戶基本信息接口結合,得到用戶基本信息。code
3、scancode_push:掃碼推事件用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操做後顯示掃描結果(若是是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者能夠下發消息。視頻
4、scancode_waitmsg:掃碼推事件且彈出「消息接收中」提示框用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操做後,將掃碼的結果傳給開發者,同時收起掃一掃工具,而後彈出「消息接收中」提示框,隨後可能會收到開發者下發的消息。
5、pic_sysphoto:彈出系統拍照發圖用戶點擊按鈕後,微信客戶端將調起系統相機,完成拍照操做後,會將拍攝的相片發送給開發者,並推送事件給開發者,同時收起系統相機,隨後可能會收到開發者下發的消息。
6、pic_photo_or_album:彈出拍照或者相冊發圖用戶點擊按鈕後,微信客戶端將彈出選擇器供用戶選擇「拍照」或者「從手機相冊選擇」。用戶選擇後即走其餘兩種流程。
7、pic_weixin:彈出微信相冊發圖器用戶點擊按鈕後,微信客戶端將調起微信相冊,完成選擇操做後,將選擇的相片發送給開發者的服務器,並推送事件給開發者,同時收起相冊,隨後可能會收到開發者下發的消息。
8、location_select:彈出地理位置選擇器用戶點擊按鈕後,微信客戶端將調起地理位置選擇工具,完成選擇操做後,將選擇的地理位置發送給開發者的服務器,同時收起位置選擇工具,隨後可能會收到開發者下發的消息。
9、media_id:下發消息(除文本消息)用戶點擊media_id類型按鈕後,微信服務器會將開發者填寫的永久素材id對應的素材下發給用戶,永久素材類型能夠是圖片、音頻、視頻、圖文消息。請注意:永久素材id必須是在「素材管理/新增永久素材」接口上傳後得到的合法id。
10、view_limited:跳轉圖文消息URL用戶點擊view_limited類型按鈕後,微信客戶端將打開開發者在按鈕中填寫的永久素材id對應的圖文消息URL,永久素材類型只支持圖文消息。請注意:永久素材id必須是在「素材管理/新增永久素材」接口上傳後得到的合法id。
Click菜單:點擊按鈕;點擊觸發特定的事件,如回覆特定圖文消息,特定動做等;
View菜單:連接按鈕;點擊超連接到特定的網站;
普通菜單:能夠設置多個二級菜單按鈕;
Java後臺組裝:
/** * 組裝菜單 * 事件類型:一、click:點擊推事件;二、view:跳轉URL;三、scancode_push:掃碼推事件;四、scancode_waitmsg:掃碼推事件且彈出「消息接收中」提示框;五、pic_sysphoto:彈出系統拍照發圖;六、pic_photo_or_album:彈出拍照或者相冊發圖;七、pic_weixin:彈出微信相冊發圖器;八、location_select:彈出地理位置選擇器;九、media_id:下發消息(除文本消息;十、view_limited:跳轉圖文消息URL; * (除了2和10是view類型,其餘都是click點擊類型;view類型須要url,click點擊類型須要key) * 9和10,是專門給第三方平臺旗下未微信認證(具體而言,是資質認證未經過)的訂閱號準備的事件類型,它們是沒有事件推送的,能力相對受限,其餘類型的公衆號沒必要使用。 * @return */ public static Menu initMenu(){ Menu menu = new Menu(); //建立一級按鈕 ClickButton buttonA = new ClickButton();//一級點擊按鈕:buttonA buttonA.setName("click菜單");//按鈕名 buttonA.setType("click");//按鈕類型 buttonA.setKey("11");//key值用來區分多個click菜單按鈕 ViewButton buttonB = new ViewButton();//一級連接按鈕:buttonB buttonB.setName("View菜單"); buttonB.setType("view"); buttonB.setUrl("http://www.centit.com/");//設置url的時候,必須設置完整的url路徑,包括http協議(http://) Button buttonC = new Button();//建立一個一級空按鈕,後面放入二級 //建立一級buttonC下面的二級按鈕 ClickButton buttonC_1 = new ClickButton();//二級點擊按鈕:button31 buttonC_1.setName("掃碼事件"); buttonC_1.setType("scancode_push"); buttonC_1.setKey("31"); ClickButton buttonC_2 = new ClickButton();//二級點擊按鈕:button32 buttonC_2.setName("地理位置"); buttonC_2.setType("location_select"); buttonC_2.setKey("32"); //把二級按鈕放到一級按鈕中 buttonC.setName("菜單"); buttonC.setSub_button(new Button[]{buttonC_1,buttonC_2}); //把一級按鈕放到menu中 menu.setButton(new Button[]{buttonA,buttonB,buttonC}); return menu; } /** * 請求建立菜單(修改也是此方法) * @param token * @param menu * @return 返回errcode,正確爲0,錯誤查看官方文檔對應錯誤碼 */ public static int createMenu(String token,String menu){ String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token); JSONObject jsonObject = doPostStr(url, menu); int result = 0; if(jsonObject!=null){ result = jsonObject.getInt("errcode"); } return result; } /** * 自定義菜單查詢 * @param token * @return */ public static JSONObject queryMenu(String token){ String url = QUERY_MENU_URL.replace("ACCESS_TOKEN", token); JSONObject jsonObject = doGetStr(url); return jsonObject; } /** * 自定義菜單刪除 * @param token * @return 返回errcode,正確爲0,錯誤查看官方文檔對應錯誤碼 */ public static int deleteMenu(String token){ String url = DELETE_MENU_URL.replace("ACCESS_TOKEN", token); JSONObject jsonObject = doGetStr(url); int result = 0; if(jsonObject!=null){ result = jsonObject.getInt("errcode"); } return result; }
菜單參數說明:
(下一章:微信公衆號-素材)