国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java開(kāi)發(fā)微信公眾號(hào)接收和被動(dòng)回復(fù)普通消息

2019-11-26 14:40:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

上篇說(shuō)完了如何接入微信公眾號(hào),本文說(shuō)一下微信公眾號(hào)的最基本功能:普通消息的接收和回復(fù)。說(shuō)到普通消息,那么什么是微信公眾號(hào)所定義的普通消息呢,微信開(kāi)發(fā)者文檔中提到的接收的普通消息包括如下幾類

1.文本消息
2.圖片消息
3.語(yǔ)音消息
4.視頻消息
5.小視頻消息
6.地理位置消息
7.鏈接消息(被動(dòng)回復(fù)的消息)

被動(dòng)回復(fù)的普通消息包括:

1.回復(fù)文本消息
2.回復(fù)圖片消息
3.回復(fù)語(yǔ)音消息
4.回復(fù)視頻消息
5.回復(fù)音樂(lè)消息
6.回復(fù)圖文消息

其實(shí)接收消息和被動(dòng)回復(fù)消息這兩個(gè)動(dòng)作是不分家的,這本來(lái)就是一個(gè)交互場(chǎng)景,一般情況就是公眾號(hào)通過(guò)分析接收到的消息,會(huì)給出對(duì)應(yīng)的回復(fù)。當(dāng)然也不能排除一些特殊業(yè)務(wù)了。

如何接收消息

要接收的這7中消息的xml格式這里就不列出了,請(qǐng)到官方文檔查看,有具體的格式定義和屬性說(shuō)明。格式很簡(jiǎn)單,基本共有屬性包括ToUserName、FromUserName、CreateTime、MsgType、MsgId,并且每種類型有自己特殊的屬性。

看到這里,其實(shí)就很明白了,接收消息的過(guò)程其實(shí)就是獲取post請(qǐng)求的這個(gè)xml,然后對(duì)這個(gè)xml進(jìn)行分析的過(guò)程。post請(qǐng)求的入口還是之前提到的微信公眾號(hào)接入的那個(gè)地址,整個(gè)公眾號(hào)的所有請(qǐng)求都會(huì)走這個(gè)入口,只是接入時(shí)是get請(qǐng)求,其它情況下是post請(qǐng)求。處理xml這里用了dom4j,xml處理代碼如下,在servlet的post方法中調(diào)用parseXml方法即可:

public static Map parseXml(HttpServletRequest request) throws Exception {// 將解析結(jié)果存儲(chǔ)在HashMap中Map map = new HashMap();// 從request中取得輸入流InputStream inputStream = request.getInputStream();/** 讀取request的body內(nèi)容 此方法會(huì)導(dǎo)致流讀取問(wèn)題 Premature end of file. Nested exception:* Premature end of file String requestBody =* inputStream2String(inputStream); System.out.println(requestBody);*/// 讀取輸入流SAXReader reader = new SAXReader();Document document = reader.read(inputStream);// 得到xml根元素Element root = document.getRootElement();// 得到根元素的所有子節(jié)點(diǎn)List<Element> elementList = root.elements();// 遍歷所有子節(jié)點(diǎn)for (Element e : elementList)map.put(e.getName(), e.getText());// 釋放資源inputStream.close();inputStream = null;return map;}private static String inputStream2String(InputStream is) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();int i = -1;while ((i = is.read()) != -1) {baos.write(i);}return baos.toString();}

如何被動(dòng)回復(fù)消息

下面我基于這樣一個(gè)邏輯來(lái)演示構(gòu)造回復(fù)的消息,接收到文本消息"文本",回復(fù)文本消息;接收到“圖片”,回復(fù)圖片消息;接收到“語(yǔ)音”,回復(fù)語(yǔ)音消息;接收到“視頻”,回復(fù)視頻消息;接收到“音樂(lè)”,回復(fù)音樂(lè)消息;接收到“圖文”,回復(fù)圖文消息。

以回復(fù)文本消息作為說(shuō)明:

<xml><ToUserName><![CDATA[發(fā)消息的人,即訂閱者]]></ToUserName><FromUserName><![CDATA[微信公眾號(hào)本身]]></FromUserName><CreateTime>消息創(chuàng)建時(shí)間(整形)</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[消息內(nèi)容]]></Content></xml>

前兩個(gè)屬性可以從接收的消息中獲取,接收的消息格式如下:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a text]]></Content><MsgId>1234567890123456</MsgId></xml> 

其中接收消息格式中的ToUserName便是回復(fù)消息的FromUserName,接收消息格式中的FromUserName便是回復(fù)消息的ToUserName。

CreateTime為消息發(fā)送的時(shí)間戳。MsgType為消息類型,文本為text。Content為消息內(nèi)容。

具體每一種類型消息的回復(fù),就是構(gòu)造此種類型的xml格式內(nèi)容,格式大同小異,只是音樂(lè)、視頻、語(yǔ)音、圖文格式相對(duì)于文本消息構(gòu)造的xml內(nèi)容稍微復(fù)雜一點(diǎn)。具體可參考官方文檔。這里不做贅述,相信各位一看便明白。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金山区| 永丰县| 宣威市| 大冶市| 雅安市| 沐川县| 姜堰市| 洪雅县| 留坝县| 卓尼县| 南木林县| 页游| 揭阳市| 英超| 明水县| 莱阳市| 会东县| 射洪县| 洪泽县| 清涧县| 教育| 繁昌县| 石棉县| 德格县| 汤阴县| 永州市| 长顺县| 错那县| 名山县| 垫江县| 崇阳县| 马关县| 宁强县| 海门市| 孟连| 监利县| 石门县| 正宁县| 许昌县| 梧州市| 岢岚县|