前一篇文章裡我們已經把公眾平台介面中訊息及相關操作都進行了封裝,本章節將主要介紹如何接收伺服器發送的訊息並做出響應。
明確在哪接收訊息
從公眾平台介面訊息指南中可以瞭解到,當使用者向公眾帳號發訊息時,伺服器會將訊息通過POST方式提交給我們在介面配置資訊中填寫的URL,而我們就需要在URL所指向的請求處理類CoreServlet的doPost方法中接收訊息、處理訊息和響應訊息。
接收、處理、響應訊息
下面先來看我已經寫好的CoreServlet的完整代碼:
package org.liufeng.course.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.liufeng.course.service.CoreService;import org.liufeng.course.util.SignUtil;/** * 核心請求處理類 * * @author liufeng * @date 2013-05-18 */public class CoreServlet extends HttpServlet {private static final long serialVersionUID = 4440739483644821986L;/** * 確認請求來自伺服器 */public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 加密簽名String signature = request.getParameter("signature");// 時間戳記String timestamp = request.getParameter("timestamp");// 隨機數String nonce = request.getParameter("nonce");// 隨機字串String echostr = request.getParameter("echostr");PrintWriter out = response.getWriter();// 通過檢驗signature對請求進行校正,若校正成功則原樣返回echostr,表示接入成功,否則接入失敗if (SignUtil.checkSignature(signature, timestamp, nonce)) {out.print(echostr);}out.close();out = null;}/** * 處理伺服器發來的訊息 */public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 將請求、響應的編碼均設定為UTF-8(防止中文亂碼)request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");// 調用核心業務類接收訊息、處理訊息String respMessage = CoreService.processRequest(request);// 響應訊息PrintWriter out = response.getWriter();out.print(respMessage);out.close();}}
代碼說明:
1)第29行:調用訊息工具類MessageUtil解析發來的xml格式的訊息,解析的結果放在HashMap裡;
2)32~36行:從HashMap中取出訊息中的欄位;
3)39-44、84行:組裝要返回的簡訊對象;
4)47~82行:示範了如何接收發送的各類型的訊息,根據MsgType判斷屬於哪種類型的訊息;
5)85行:調用訊息工具類MessageUtil將要返回的簡訊對象TextMessage轉化成xml格式的字串;
關於事件推送(關注、取消追蹤、菜單點擊)
對於訊息類型的判斷,像簡訊、圖片訊息、地理位置訊息、連結訊息和語音訊息都比較好理解,有很多剛接觸的朋友搞不懂事件推送訊息有什麼用,或者不清楚該如何判斷使用者關注的訊息。那我們就專門來看下事件推送,是官方訊息介面文檔中關於事件推送的說明:
這裡我們只要關心兩個參數:MsgType和Event。當MsgType=event時,就表示這是一條事件推送訊息;而Event表示事件類型,包括訂閱、取消訂閱和自訂菜單點擊事件。也就是說,無論使用者是關注了公眾帳號、取消對公眾帳號的關注,還是在使用公眾帳號的菜單,伺服器都會發送一條MsgType=event的訊息給我們,而至於具體這條訊息表示關注、取消追蹤,還是菜單的點擊事件,就需要通過Event的值來判斷了。(注意區分Event和event)
連載五篇教程總結
經過5篇的講解,已經把開發模式啟用,介面配置,訊息相關工具類的封裝,訊息的接收與響應全部講解完了,而且貼上了完整的原始碼,相信有一定Java基礎的朋友可以看的明白,能夠通過系列文章基本掌握公眾平台開發的相關技術知識。下面我把目前項目的完整結構貼出,方便大家對照:
http://www.bkjia.com/PHPjc/444572.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/444572.htmlTechArticle前一篇文章裡我們已經把公眾平台介面中訊息及相關操作都進行了封裝,本章節將主要介紹如何接收伺服器發送的訊息並做出響應...