Java微訊號開發基礎篇
阿新 • • 發佈:2019-02-09
有兩種開發模式,編輯模式和開發者模式,編輯模式就是簡單的網上直接像word寫文件一樣,下面就說一下開發者模式。
一 環境搭建
- 申請一個微信公眾號
- 外網對映工具(開發除錯用)
- 在官網實現開發者模式接入
二 訊息的接收與響應
微信客戶端傳送資料,先包裝成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;
}