微信公衆號開發(二)

微信公衆號開發json

 

 第二章  建立菜單服務器

1.自定義菜單建立接口

備註:微信

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

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

三、建立自定義菜單後,菜單的刷新策略是,在用戶進入公衆號會話頁或公衆號profile頁時,如 果發現上一次拉取菜單的請求在5分鐘之前,就會拉取一下菜單,若是菜單有更新,就會刷新客戶端的菜單。測試時能夠嘗試取消關注公衆帳號後再次關注,則能夠看到建立後的效果。網站

 

菜單按鈕類型:(key值爲click等點擊類型必須,urlview類型必須)url

1click點擊推事件用戶點擊click類型按鈕後,微信服務器會經過消息接口推送消息類型爲event的結構給開發者(參考消息接口指南),而且帶上按鈕中開發者填寫的key值,開發者能夠經過自定義的key值與用戶進行交互;spa

2view跳轉URL用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁受權獲取用戶基本信息接口結合,得到用戶基本信息。code

3scancode_push掃碼推事件用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操做後顯示掃描結果(若是是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者能夠下發消息。視頻

4scancode_waitmsg掃碼推事件且彈出「消息接收中」提示框用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操做後,將掃碼的結果傳給開發者,同時收起掃一掃工具,而後彈出「消息接收中」提示框,隨後可能會收到開發者下發的消息。

5pic_sysphoto彈出系統拍照發圖用戶點擊按鈕後,微信客戶端將調起系統相機,完成拍照操做後,會將拍攝的相片發送給開發者,並推送事件給開發者,同時收起系統相機,隨後可能會收到開發者下發的消息。

6pic_photo_or_album彈出拍照或者相冊發圖用戶點擊按鈕後,微信客戶端將彈出選擇器供用戶選擇「拍照」或者「從手機相冊選擇」。用戶選擇後即走其餘兩種流程。

7pic_weixin彈出微信相冊發圖器用戶點擊按鈕後,微信客戶端將調起微信相冊,完成選擇操做後,將選擇的相片發送給開發者的服務器,並推送事件給開發者,同時收起相冊,隨後可能會收到開發者下發的消息。

8location_select彈出地理位置選擇器用戶點擊按鈕後,微信客戶端將調起地理位置選擇工具,完成選擇操做後,將選擇的地理位置發送給開發者的服務器,同時收起位置選擇工具,隨後可能會收到開發者下發的消息。

9media_id下發消息(除文本消息)用戶點擊media_id類型按鈕後,微信服務器會將開發者填寫的永久素材id對應的素材下發給用戶,永久素材類型能夠是圖片、音頻、視頻、圖文消息。請注意:永久素材id必須是在「素材管理/新增永久素材」接口上傳後得到的合法id。

10view_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;
    }

菜單參數說明:

    

 

 (下一章:微信公衆號-素材)

相關文章
相關標籤/搜索