Java開(kāi)發(fā)微信公眾號(hào)接收和被動(dòng)回復(fù)普通消息
上篇說(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)。具體可參考官方文檔。這里不做贅述,相信各位一看便明白。
- java微信公眾號(hào)企業(yè)付款開(kāi)發(fā)
- Java版微信公眾號(hào)支付開(kāi)發(fā)全過(guò)程
- 微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼【java版】
- java微信公眾號(hào)支付開(kāi)發(fā)之現(xiàn)金紅包
- 微信公眾號(hào)開(kāi)發(fā)之回復(fù)圖文消息java代碼
- Java微信公眾號(hào)開(kāi)發(fā)之通過(guò)微信公眾號(hào)獲取用戶信息
- java微信公眾號(hào)開(kāi)發(fā)案例
- 用Java設(shè)計(jì)模式中的觀察者模式開(kāi)發(fā)微信公眾號(hào)的例子
- java微信公眾號(hào)開(kāi)發(fā)第一步 公眾號(hào)接入和access_token管理
- java微信公眾號(hào)開(kāi)發(fā)(搭建本地測(cè)試環(huán)境)
- java開(kāi)發(fā)微信公眾號(hào)支付
- Java 微信公眾號(hào)開(kāi)發(fā)相關(guān)總結(jié)
相關(guān)文章
解決java讀取EXCEL數(shù)據(jù)變成科學(xué)計(jì)數(shù)法的問(wèn)題
這篇文章主要介紹了解決java讀取EXCEL數(shù)據(jù)變成科學(xué)計(jì)數(shù)法的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
Java如何在 Word 中設(shè)置上、下標(biāo)
這篇文章主要介紹了Java如何在 Word 中設(shè)置上、下標(biāo),幫助大家更好的利用Java處理文檔,感興趣的朋友可以了解下2020-09-09
深入分析Spring Cloud 負(fù)載均衡器架構(gòu)選型
文章詳細(xì)介紹了OpenFeign的初始化和執(zhí)行流程,包括FeignClient注解、FeignClientsRegistrar類、FeignClientFactoryBean工廠類、Targeter接口及其實(shí)現(xiàn)等,感興趣的朋友一起看看吧2024-12-12
SpringCloud中Zuul網(wǎng)關(guān)原理及其配置
Spring?Cloud是一個(gè)基于Spring?Boot實(shí)現(xiàn)的微服務(wù)應(yīng)用開(kāi)發(fā)工具,其中的Zuul網(wǎng)關(guān)可以實(shí)現(xiàn)負(fù)載均衡、路由轉(zhuǎn)發(fā)、鑒權(quán)、限流等功能,本文將從Spring?Cloud中Zuul網(wǎng)關(guān)的原理、使用場(chǎng)景和配置過(guò)程詳細(xì)介紹,幫助大家更好地了解和應(yīng)用Zuul網(wǎng)關(guān),需要的朋友可以參考下2023-06-06
java開(kāi)發(fā)之基于Validator接口的SpringMVC數(shù)據(jù)校驗(yàn)方式
這篇文章主要介紹了java開(kāi)發(fā)之基于Validator接口的SpringMVC數(shù)據(jù)校驗(yàn)方式,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下2021-09-09
Spring案例打印機(jī)的實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Spring案例打印機(jī)的實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
java并發(fā)包工具CountDownLatch源碼分析
這篇文章主要為大家介紹了java并發(fā)包工具CountDownLatch源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀
這篇文章主要為大家詳細(xì)介紹了JSP中增刪改查實(shí)戰(zhàn)案例的相關(guān)知識(shí),文中的示例代碼講解現(xiàn)象,具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2023-03-03

