天天看點

java實作微公衆平台自定義菜單

         微信前好久就已經退出了自定義菜單的建立,并且這次不想以前一樣還需要申請,一申請就需要好幾天,這次隻需要将你的微信公衆平台申請成為服務号即可,既然說到這,那我我也順便說說

,服務号和訂閱号到底有什麼差別,服務号就是為大衆說服務的,而訂閱好着重為大衆提供咨詢,于是官方為了展現這兩者的不同,就給了服務号自定義菜單的權利,而給了訂閱号,每天一條

主動推送的權利(服務号每月一條)。

          好了,不廢話了,今天主要教大家怎樣去實作微信的自定義菜單,先大概介紹一下真個流程,首先我們通過申請服務号時得到的appid和appsecret來申請到ACCESS_TOKEN,然後通過

ACCESS_TOKEN建立自定義菜單。

       一。ACCESS_TOKEN,這個玩意是建立自定義菜單的核心

         1.ACCESS_TOKEN是什麼,是對應于公衆号是全局唯一的票據,說白了,他是你通路微信伺服器的臨時憑據,證明你是一個服務号開發者。

         2.怎樣得到ACCESS_TOKEN?填寫URL和TOKEN下面的地方的有appid和appsecret。注意:(這兩個東西,必須在申請為服務号過後才可以得到),在你的程式裡,需要通過get方式擷取

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

連結,裡邊的appid和appsecret是你自己申請服務号時得到的。結果會傳回

{"access_token":"ACCESS_TOKEN","expires_in":7200}

具體代碼如下:

StringBuffer bufferRes = new StringBuffer();
try {   //這裡填入你的appid和appsecret
      URL realUrl = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_"+
           "type=client_credential&appid=?&secret=?");
      HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection(); 
     // 讀取逾時 --伺服器響應比較慢,增大時間,這個一般不會出現,不過寫一寫會比較好
    conn.setReadTimeout(25000);  
     HttpURLConnection.setFollowRedirects(true);
     // 設定請求方式
    conn.setRequestMethod("GET");
     conn.setDoOutput(true);
     conn.setDoInput(true);
     //進行連接配接
    conn.connect();
     //擷取并封裝讀入流
    InputStream in = conn.getInputStream();
     BufferedReader read = new BufferedReader(new InputStreamReader(in,"UTF-8"));
     String returnString = null;
     //讀出傳回碼
    while ((returnString =read.readLine())!=null){
             bufferRes.append(returnString );
      }
      String a = bufferRes.toString();
     //從傳回碼中,擷取到
    Config.ACCESS_TOKEN = a.substring(17, a.length()-20);
      in.close();
      if (conn != null) {
     // 關閉連接配接
     conn.disconnect();
     }
} catch (Exception e) {
 e.printStackTrace();
}
           

如上述代碼所示,我們就擷取到了ACCESS_TOKEN,不過官方給出的說明是,這個ACCESS_TOKEN會在2小時後失效。傳回格式裡邊的ACCESS_TOKEN就是我們所需要的了,是以我們直接截取從17至

倒數20(不信你就去數一數)。特别注意:TOKEN和ACCESS_TOKEN是不同的兩個東西,因為我在這上面犯過二,是以特别提醒一下,哈哈。

二。設定菜單

 擷取菜單ACCESS_TOKEN後,你可以幹關于菜單的很多事情,你可以設定菜單,删除菜單,以及查詢正在使用的菜單,相關的說明在“http://mp.weixin.qq.com/wiki/index.php?

title=自定義菜單接口”中有具體的說明。你們可以參詳一下,我這裡主要講述一下關于建立的代碼。具體代碼如下:

StringBuffer bufferRes = new StringBuffer();
  try {
        //這個URL是微信規定的格式,沒什麼好說的,其中的accessToken就是上面所講到的擷取到的ACCESS_TOKEN
       URL realUrl = new URL("https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+ accessToken);
      HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
   
      // 連接配接逾時
    conn.setConnectTimeout(25000);
      // 讀取逾時 --伺服器響應比較慢,增大時間
      conn.setReadTimeout(25000);
   
       Htt設定pURLConnection.setFollowRedirects(true);
      // 設定請求方式,這裡一定要是POST,原因去官網看去
      conn.setRequestMethod("POST");
       conn.setDoOutput(true);
       conn.setDoInput(true);
       conn.connect();
      // 擷取URLConnection對象對應的輸出流
     OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
      // 發送請求參數
     out.write();
       out.flush();
       out.close();
    
      InputStream in = conn.getInputStream();
     BufferedReader read = new BufferedReader(new InputStreamReader(in,"UTF-8"));
      String returnString= null;
     while ((returnString=read.readLine())!=null){
            bufferRes.append(returnString);
      }
      System.out.println(bufferRes.toString());
      in.close();
       if (conn != null) {
       // 關閉連接配接
    conn.disconnect();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
           

   需要注意的是,其中的params就是自定義菜單的具體格式,并且這次的請求方式是POST,而不是GET,這次傳回碼隻是告訴你菜單是否設定成功,不會告訴你錯在哪裡,如果你的傳回碼說你錯了,那多數是因為你給的自定義菜單的格式有錯誤,關于自定義菜單的格式,我不得不承認确實看起來很複雜,還是自己多研究研究比較好,我這有一份模闆,對照着看看,官網上有模闆,自己多研究研究,這個真沒什麼好說的,

OK,祝各位好運,我的Q:987706386