1. 程式人生 > >Java微訊號開發基礎篇

Java微訊號開發基礎篇

有兩種開發模式,編輯模式和開發者模式,編輯模式就是簡單的網上直接像word寫文件一樣,下面就說一下開發者模式。

一 環境搭建

  1. 申請一個微信公眾號
  2. 外網對映工具(開發除錯用)
  3. 在官網實現開發者模式接入

二 訊息的接收與響應

微信客戶端傳送資料,先包裝成xml檔案的格式,提交到servlet,在服務端通過解析獲得請求資料,在後臺進行處理後,把結果再次包裝成xml通過PrintWriter的方式給客戶端。
如以下一個自己寫的邏輯,客戶端傳送“1”,“2”文字內容回覆不同的內容,關注該公眾號,獲取位置資訊等event同樣也回覆不同內容:

if(MessageUtil.MESSAGE
_TEXT.equals(msgType)){ if("1".equals(content)){ message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.firstMenu()); }else if("2".equals(content)){ message = MessageUtil.initNewsMessage(toUserName, fromUserName); } }else if(MessageUtil.MESSAGE
_EVNET.equals(msgType)){ String eventType = map.get("Event"); if(MessageUtil.MESSAGE_SUBSCRIBE.equals(eventType)){ message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText()); }else if(MessageUtil.MESSAGE_CLICK.equals
(eventType)){ message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText()); } }else if(MessageUtil.MESSAGE_LOCATION.equals(msgType)){ String label = map.get("Label"); message = MessageUtil.initText(toUserName, fromUserName, label); }

為了方便,這裡可以資料封裝到類中,再通過xstream將物件解析成xml,這時就要在“開發者文件”中根據相應的xml資料結構建立類(欄位的大小寫很重要),而且在解析成xml的時候要注意標籤的替換(因為要符合微信官方規定的結構)。

三 素材管理介面

通過呼叫相應的介面,可以實現素材的上傳,得到一個該素材的ID,這樣就可以給客戶端回覆圖片,語言等訊息了,而不再是簡單的文字訊息。

介面的提交有兩種方式,返回的是json資料格式:

  • 不帶引數的get方式,比如說獲取票據access_token,獲取和刪除自定義選單
  • 帶引數的post方式,比如說建立,生成自定義選單。

要注意的一點是:檔案的上傳和自定義選單的建立都是Post請求,但檔案上傳是以流的形式,而Post請求是以String提交給服務端的。

例項程式碼:

/*
     * 生成Menu
     */
    public static int createMenu(String token, String menu) throws Exception {
        int result = 0;

        String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);
        JSONObject jsonObject = doPost(url, menu);
        if(jsonObject != null) {
            result = jsonObject.getInt("errcode");
        }
        return result;
    }

其中doPost方法為:

/*
     * post,將組裝的引數提交到介面地址
     * 需要提交引數時呼叫
     */
    public static JSONObject doPost(String url, String outStr) throws Exception {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        JSONObject jsonObject = null;

        // 將傳過來的引數加進去
        httpPost.setEntity(new StringEntity(outStr, "utf-8"));

        HttpResponse response = httpClient.execute(httpPost);
        String result = EntityUtils.toString(response.getEntity(), "utf-8");
        jsonObject = JSONObject.fromObject(result);

        return jsonObject;
    }