亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java微信公眾平臺開發(2) 微信服務器post消息體的接收

2019-11-26 12:32:40
字體:
來源:轉載
供稿:網友

在上一篇的文章中我們詳細講述了如何將我們的應用服務器和微信騰訊服務器之間的對接操作,最后接入成功,不知道你有沒有發現在上一篇的【controller】中我定義了一個get方法和一個post方法,但是在使用過程中我們就用了get方法,這里我們就來說說我們預留的post的方法的使用!

當我們在完成了服務器驗證之后,此后用戶每次向公眾號發送消息、或者產生自定義菜單點擊事件時,開發者填寫的服務器配置URL將得到微信服務器推送過來的消息和事件,然后開發者可以依據自身業務邏輯進行響應,例如回復消息等!通過這句話我們能知道后面所有的微信服務器和我們應用服務器之間的溝通都是通過post消息體來完成的,那么我們這里將講述如何接受微信post的消息體!

(一)消息類型和消息格式

上面有說道我們所有的和微信服務器之間進行溝通基本都是通過post消息體完成的,首先我們了解下消息體的類型,大致類型有兩種:

普通消息類型:文本消息、圖片消息、語音消息、視頻消息、小視頻消息、地理位置消息、鏈接消息

事件消息類型:關注/取消關注事件、掃描帶參數二維碼事件、上報地理位置事件、自定義菜單事件、點擊菜單拉取消息時的事件推送、點擊菜單跳轉鏈接時的事件推送
消息類型:微信服務端推送的所有消息體的類型格式都是xml格式;

(二)消息重試機制

微信服務器在五秒內收不到響應會斷掉連接,并且重新發起請求,總共重試三次。假如服務器無法保證在五秒內處理并回復,可以直接回復空串,微信服務器不會對此作任何處理,并且不會發起重試,但是這里后期可以使用【客服消息接口】去完成消息再次推送。

(三)消息接收處理

在前面我們有說道微信的消息體是采用xml格式,那么我在這里寫了一個MessageUtil去做消息格式的處理,大致代碼如下:

package com.cuiyongzhi.wechat.util;import java.io.InputStream;import java.io.Writer;import java.util.HashMap;import java.util.List;import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader; import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.core.util.QuickWriter;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;import com.thoughtworks.xstream.io.xml.XppDriver;  /** * ClassName: MessageUtil * @Description: 消息工具類 * @author dapengniao * @date 2016年3月7日 上午10:05:04 */public class MessageUtil {     /**    * 返回消息類型:文本    */   public static final String RESP_MESSAGE_TYPE_TEXT = "text";     /**    * 返回消息類型:音樂    */   public static final String RESP_MESSAGE_TYPE_MUSIC = "music";     /**    * 返回消息類型:圖文    */   public static final String RESP_MESSAGE_TYPE_NEWS = "news";     /**    * 請求消息類型:文本    */   public static final String REQ_MESSAGE_TYPE_TEXT = "text";     /**    * 請求消息類型:圖片    */   public static final String REQ_MESSAGE_TYPE_IMAGE = "image";     /**    * 請求消息類型:鏈接    */   public static final String REQ_MESSAGE_TYPE_LINK = "link";     /**    * 請求消息類型:地理位置    */   public static final String REQ_MESSAGE_TYPE_LOCATION = "location";     /**    * 請求消息類型:音頻    */   public static final String REQ_MESSAGE_TYPE_VOICE = "voice";     /**    * 請求消息類型:推送    */   public static final String REQ_MESSAGE_TYPE_EVENT = "event";     /**    * 事件類型:subscribe(訂閱)    */   public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";     /**    * 事件類型:unsubscribe(取消訂閱)    */   public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";     /**    * 事件類型:CLICK(自定義菜單點擊事件)    */   public static final String EVENT_TYPE_CLICK = "CLICK";     /**   * @Description: 解析微信發來的請求(XML)    * @param @param request   * @param @return   * @param @throws Exception     * @author dapengniao   * @date 2016年3月7日 上午10:04:02   */  @SuppressWarnings("unchecked")  public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {     // 將解析結果存儲在HashMap中      Map<String, String> map = new HashMap<String, String>();       // 從request中取得輸入流      InputStream inputStream = request.getInputStream();     // 讀取輸入流      SAXReader reader = new SAXReader();     Document document = reader.read(inputStream);     // 得到xml根元素      Element root = document.getRootElement();     // 得到根元素的所有子節點      List<Element> elementList = root.elements();       // 遍歷所有子節點      for (Element e : elementList)       map.put(e.getName(), e.getText());       // 釋放資源      inputStream.close();     inputStream = null;       return map;   }     @SuppressWarnings("unused")  private static XStream xstream = new XStream(new XppDriver() {     public HierarchicalStreamWriter createWriter(Writer out) {       return new PrettyPrintWriter(out) {         // 對所有xml節點的轉換都增加CDATA標記          boolean cdata = true;         @SuppressWarnings("rawtypes")        public void startNode(String name, Class clazz) {           super.startNode(name, clazz);         }           protected void writeText(QuickWriter writer, String text) {           if (cdata) {             writer.write("<![CDATA[");             writer.write(text);             writer.write("]]>");           } else {             writer.write(text);           }         }       };     }   }); }

在這個方法體里需要用到部分依賴,需要在pom文件加入如下部分:

<!-- xml --><dependency>  <groupId>org.apache.directory.studio</groupId>  <artifactId>org.dom4j.dom4j</artifactId>  <version>1.6.1</version></dependency> <dependency>  <groupId>com.thoughtworks.xstream</groupId>  <artifactId>xstream</artifactId>  <version>1.4.8</version></dependency>

然后將我們的WechatSecurity Controller中的post方法修改為如下,用于做消息的接收和處理:

@RequestMapping(value = "security", method = RequestMethod.POST)  // post方法用于接收微信服務端消息  public void DoPost(HttpServletRequest request,HttpServletResponse response) {    System.out.println("這是post方法!");    try{    Map<String, String> map=MessageUtil.parseXml(request);    System.out.println("============================="+map.get("Content"));    }catch(Exception e){      logger.error(e,e);    }  }

因為前面我們已經開啟了我們的開發者模式,那么當我們在這里將我們代碼發布之后再公眾號上發送消息,在們的后臺就能看到我們的消息體進入并解析成功了,這里我輸出的是微信的【原始ID】,截圖大致如下:

在這里我只是做了消息體的接收和轉換成Map,并沒有對消息做出來,那么下一篇我們將講述對消息的分類處理!感謝你的翻閱,如有疑問可以留言討論!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲91av视频| 久久久精品一区二区三区| 成人在线国产精品| 国产在线视频欧美| 国产精品美女av| 国产精品羞羞答答| 91九色视频在线| 97精品国产aⅴ7777| 欧美激情18p| 97久久精品国产| 欧美精品一区三区| 美女少妇精品视频| 日韩精品极品在线观看播放免费视频| 国产亚洲aⅴaaaaaa毛片| 久久人人爽人人爽人人片av高清| 国产精品福利网| 精品无人区乱码1区2区3区在线| 成人福利在线视频| 亚洲国产精品人人爽夜夜爽| 国产一区二区久久精品| 久久综合免费视频| 在线色欧美三级视频| 欧美激情2020午夜免费观看| 国产欧美日韩高清| 国产激情综合五月久久| 欧美激情精品在线| 欧美日韩国产黄| 精品久久久久久国产91| 国产精品国产自产拍高清av水多| 欧美精品videos性欧美| 国产亚洲精品久久久久久| 国产精品成人va在线观看| 上原亚衣av一区二区三区| 欧美午夜xxx| 成人激情综合网| 国产精选久久久久久| 久久免费少妇高潮久久精品99| 亚洲一品av免费观看| 国产91精品最新在线播放| 欧美成人午夜视频| 尤物tv国产一区| 国产成人综合亚洲| 日av在线播放中文不卡| 欧美专区国产专区| 青青草99啪国产免费| 国产精品久久久久影院日本| 日韩精品中文字幕久久臀| 在线看片第一页欧美| 国产精品久久久久久久av电影| 日韩人在线观看| 精品美女永久免费视频| 成人黄色在线免费| 91久久国产精品| 欧美床上激情在线观看| 91影院在线免费观看视频| 欧美一级片久久久久久久| 精品中文视频在线| 亚洲精品国偷自产在线99热| 日韩av中文在线| 成人免费激情视频| 日韩二区三区在线| 精品国产一区二区三区久久久| 日韩欧美国产视频| 国产成人精品优优av| 欧美老少配视频| 高跟丝袜欧美一区| 色悠久久久久综合先锋影音下载| 一区二区国产精品视频| 亚洲国产欧美一区二区三区久久| 日韩激情第一页| 亚洲色图欧美制服丝袜另类第一页| 欧美黄色片免费观看| 91网站在线免费观看| 97视频在线播放| 久久视频在线观看免费| 91精品国产色综合久久不卡98口| 欧美日韩美女在线观看| 成人自拍性视频| 91夜夜揉人人捏人人添红杏| 亚洲精品久久久久久久久久久| 国内精品模特av私拍在线观看| 亚洲黄色av女优在线观看| 亚洲福利影片在线| 久久国产精品影片| 97色在线视频| 91干在线观看| 国产美女扒开尿口久久久| 一区二区三区高清国产| 97香蕉久久超级碰碰高清版| 日韩久久免费视频| 亚洲资源在线看| 成人国产精品久久久久久亚洲| 国产色婷婷国产综合在线理论片a| 欧美电影免费观看大全| 亚洲欧洲中文天堂| 国产在线观看91精品一区| 欧美亚洲成人免费| 国产91色在线|免| 日韩av网址在线观看| 日韩精品在线电影| 国产成人精品视频在线| 91久久国产综合久久91精品网站| 国产乱人伦真实精品视频| 亚洲欧美中文另类| 91理论片午午论夜理片久久| 欧美尺度大的性做爰视频| 久久在线免费视频| 日韩中文在线视频| 国产精品视频xxx| 国产亚洲欧美另类中文| 国产精品亚洲精品| 亚洲最大激情中文字幕| 国产精品美女视频网站| 成人黄色短视频在线观看| 亚洲国产精品人久久电影| 在线精品高清中文字幕| 欧美激情按摩在线| 久99九色视频在线观看| 91精品啪在线观看麻豆免费| 久久不射热爱视频精品| 国产伦精品免费视频| 日韩大片在线观看视频| 免费av在线一区| 国产精品嫩草影院久久久| 日日骚av一区| 亚洲国产精久久久久久久| 久久久久久久97| 狠狠躁夜夜躁人人爽天天天天97| 欧美肥臀大乳一区二区免费视频| 欧美激情国内偷拍| 日韩亚洲精品电影| 欧美亚洲一级片| 久久久久久欧美| 亚洲www视频| 日韩欧美亚洲成人| 亚洲欧美一区二区三区久久| 国产精品成久久久久三级| 91久久久亚洲精品| 久久免费福利视频| 国产一区二区在线播放| 午夜精品一区二区三区av| 亚洲欧美国产日韩中文字幕| 成人网欧美在线视频| 91探花福利精品国产自产在线| 国产精品一区二区三区久久久| 久久亚洲精品中文字幕冲田杏梨| 久久久亚洲国产| 成人精品久久久| 国产欧美日韩免费| 91亚洲精华国产精华| 日本免费久久高清视频| 91在线无精精品一区二区| 欧美老少做受xxxx高潮| 久久精品中文字幕一区| 精品福利视频导航| 亚洲精品91美女久久久久久久| 国产精品白嫩初高中害羞小美女| 国内精品久久久久久影视8| 91在线观看免费观看| 在线播放国产精品| 久久久亚洲成人| 伊人激情综合网| 2019av中文字幕| 久久久www成人免费精品|