<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ##自定義菜單 ###簡介 自定義菜單的開發,會讓公眾號更像是一個輕量級的應用。可以更好的提升公眾號的交互屬性。 ###自定義菜單創建 * * * * * ######**提示**: ######1.自定義菜單最多包括3個一級菜單,每個一級菜單最多5個二級菜單。 ######2.一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分會以“...”代替。 ######3.創建自定義菜單后,菜單的刷新策略是,在用戶進入公眾號會話頁或公眾號profile頁時,如果發現上一次拉取菜單的請求在5分鐘以前,就會拉取一下菜單,如果菜單有更新,就會刷新客戶端的菜單。測試時可以嘗試取消關注公眾賬號后再次關注,則可以看到創建后的效果。 * * * * * * 自定義菜單接口有很多種類型(詳細可參看開發者文檔),這里只選擇兩個常用的接口進行說明(click和view) 1.click : 點擊推事件 用戶點擊 click類型按鈕后,微信服務器會通過消息接口推送消息類型為event的結構給開發者(微信消息接口后續會介紹)并且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互; 2.view:跳轉URL 用戶點擊view類型按鈕后,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁授權獲取用戶基本信息接口結合,獲得用戶基本信息。 **接口調用方式和請求示例“開發者文檔”中有詳細說明,這里仔細說下封裝方法** ###封裝菜單結構 通過官方API給出的 JSON格式,我們大概將菜單分為三類:click類型、view類型和混合型。每個菜單對象都有一個共同的 name屬性(即菜單名稱),因此需要定義一個菜單對象的基類,所有菜單對象都需要繼承該類。代碼如下 ~~~ /* * 菜單的基類 */ public class Button { private String name; public String getName(){ return name; } public void setName(String name){ this.name = name; } } ~~~ * click類型有type、name、key 3個屬性,對應代碼如下 ~~~ public class ClickButton extends Buttuon { private String type; private String key; public String getType(){ return type; } public void settype(String type){ this.type = type; } public String getKey(){ return key; } public void setKey(){ this.key = key; } } ~~~ * view 類型有type、name、url 3個屬性 ~~~ public class ViewButton extends Buttuon { private String type; private String url; public String getType(){ return type; } public void settype(String type){ this.type = type; } public String getUrl(){ return url; } public void setUrl(){ this.url = url; } } ~~~ * 混合型的菜單按鈕指的是含有自按鈕的Button,也就是含有子菜單的一級菜單 ~~~ public class ComplexButton extends Button { private Button[] sub_button; public Buttuon[] getSub_button(){ return sub_button; } public void setSub_button(Button[] sub_button){ this.sub_button = sub_button; } } ~~~ * 最后是整個帶單對象的封裝,代碼如下 ~~~ /** * 菜單封裝 */ public class Meun { private Button[] button; public Button[] getButton(){ return button; } public void setButton(Button[] button){ this.button = button; } } ~~~ ### 創建菜單 我們通過以上封裝類定義菜單的結構,得到JSON格式的菜單數據,代碼如下 ~~~ public static void main(String[] args){ ClickButton btn1 = new ClickButton(); btn1.setName("第一個菜單"); btn1.setType("click"); btn1.setKey("m_1"); ViewButton btn2 = new ViewButton(); btn2.setName("第二個菜單"); btn2.setType("view"); btn2.setUrl("http://www.baidu.com"); ClickButton btn31 = new ClickButton(); btn31.setName("復合菜單1"); btn31.setType("click"); btn31.setKey("m_3_1"); ClickButton btn32 = new ClickButton(); btn32.setName("復合菜單2"); btn32.setType("click"); btn32.setKey("m_3_2"); //復合菜單包含兩個click類型的菜單 ComplexButton btn3 = new ComplexButton(); btn3.setName("第三個菜單"); btn3.setSub_button(new Button[] {btn31,btn32}); //創建菜單對象 Menu menu = new Menu(); menu.setButton(new Button[] {btn1,btn2,btn3}); //將菜單對象轉換成 JSON字符串 String jsonMenu = JSONObject.fromObject(menu).toString(); system.out.println(jsonMenu); } ~~~ 在得到JSON格式的菜單結構之后,我們需要發起HTTPS POST請求將菜單結構提交到https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN 來創建菜單。代碼如下 ~~~ // 菜單創建接口 String menuCreateUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; //建立連接 URL url = new URL(menuCreateUrl); HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection; //使用自定義的信任管理器 TrustManager[] tm = {new MyX509TTrustManager()}; SSLContext sslContext = SSLContext.getInstance("SSL","SunJSSE"); sslContext.init(null,tm,new java.security.SecureRandom()); SSLSocketFactory ssf = sslContext.getSocketFactory(); conn.setSSLSocketFactory(ssf); httpUrlConn.setDoOutput(true); httpUrlConn.setDoInput(true); //設置請求方式 httpUrlConn.setRequestMethod("POST"); //向輸出流寫菜單結構 OutputStream outputStream = httpUrlConn.getOutputStream(); outputStream.write(jsonMenu.getBytes("UTF-8")); outputStream.close(); //取得輸入流 InputStream inputStream = httpUrlConn.getInputStream(); inputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //讀取相應內容 StringBuffer buffer = new StringBuffer(); String str = null while ((str = bufferedReader.readLine()) != null){ buffer.append(str); } //關閉、釋放資源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); httpUrlConn.disconnect(); //輸出菜單創建結果 System.out.println(buffer); ~~~ 自定義菜單創建完成后,由于微信客戶端的緩存問題,菜單不會馬上顯示,測試的時候,可以通過取消關后再次關注的方式來查看最新的菜單效果。 * * * * * ######**提示**:如果要修改公眾賬號的菜單,那么不需刪除原有菜單,再次創建菜單會自動覆蓋原有菜單。 * * * * * ###菜單刪除和查詢 * 查詢接口 ~~~ https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN ~~~ 查詢接口返回的是json數組,注意點只有一個,menu為默認菜單,conditionalmenu為個性化菜單(詳細demo可查看開發文檔) * 刪除接口 ~~~ https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN ~~~ **上述兩個接口的調用方式和獲取憑證接口一樣,都是發送HTTPS GET請求調用,這里就不重復說明了** ###click菜單點擊事件 菜單創建完成后,view類型的菜單會根據URL自動使用微信瀏覽器進行訪問,而click類型菜單則需要我們自己開發響應事件。當點擊click類型菜單時,微信服務器會向后臺推送一條消息類型為event,事件類型為click的事件消息。而我們要做的就是接受該事件消息并作出響應,代碼如下 ~~~ //判斷消息類型 if(msgType.equals("event")){ //事件類型 String eventType = requestMap.get("Event"); //自定義菜單點擊事件 if(eventType.equals("CLICK")){//特別注意,這里click要大寫! //事件Key值,與創建菜單時的key值對應 String eventKey = requesMap.get("EventKey"); //根據key值判斷用戶點擊的按鈕 if(eventKey.equals("m_1")){ respContent = "點擊了第一個菜單"; }esle if(eventKey.equals("m_3_1")){ respContent = "點擊了復合菜單1"; }esle if(eventKey.equals("m_3_2")){ respContent = "點擊了復合菜單2"; } } } ~~~ **詳細處理方法,會在消息管理內說明**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看