在上一篇文章中披粟,我們實(shí)現(xiàn)了被關(guān)注回復(fù)與關(guān)鍵詞回復(fù)功能舶沿。在用戶關(guān)注的時(shí)候自動(dòng)推送功能菜單,并根據(jù)用戶輸入的關(guān)鍵詞,回復(fù)特定信息恭取。但是轿衔,我們只能回復(fù)文本消息給用戶节吮,如何才回復(fù)一條圖文消息呢残邀?本周,我們一起來學(xué)習(xí)一下微信公眾平臺(tái)開發(fā)之【圖文消息的發(fā)送與響應(yīng)】
一萨赁、了解圖文消息XML包結(jié)構(gòu)
相信一直學(xué)習(xí)我們系列博文的同學(xué)弊琴,一定了解我們的“套路”了,首先杖爽,我們要來了解一下圖文消息的XML包結(jié)構(gòu)敲董。微信官方提供如下參數(shù)信息:
那么紫皇,了解了圖文消息的XML包結(jié)構(gòu)以后,我們就需要參照文本消息的回復(fù)腋寨,在我們的Java后臺(tái)聪铺,組裝我們的圖文消息實(shí)體類。
但是萄窜,組裝之前铃剔,我們不難發(fā)現(xiàn),ToUserName查刻、FromUserName键兜、CreateTime、MsgType等參數(shù)穗泵,在文本消息中也出現(xiàn)過普气,而且在之后各種消息中都會(huì)出現(xiàn),那么回想一下我們封裝的文本消息實(shí)體類佃延,很顯然现诀,我們需要將這些相同的內(nèi)容,提取到一個(gè)父類中履肃。下面仔沿,我們使用代碼操作一下。
二榆浓、重新封裝文本消息&圖文消息實(shí)體類
① 提取文本消息實(shí)體類(子類)代碼至消息實(shí)體類(父類)
首先于未,打開我們之前寫好的文本消息實(shí)體類textMessage:
找到里面共同的屬性,并將代碼提取到父類中:
新建一個(gè)父類陡鹃,baseMessage.java,并將上述紅線區(qū)域內(nèi)的代碼提取到父類中,讓我們的textMessage類繼承此父類抖坪。
接下來萍鲸,我們分析一下微信的圖文消息XML包結(jié)構(gòu):
<![CDATA[title1]]>
<![CDATA[title]]>
不難發(fā)現(xiàn),在 標(biāo)簽中擦俐,可以有一個(gè)或多個(gè)標(biāo)簽脊阴,這也就對(duì)應(yīng)著一條到多條圖文消息。那么顯然蚯瞧,在組裝圖文消息實(shí)體類時(shí)嘿期,我們需要構(gòu)建兩個(gè)實(shí)體類,分別為:News.Java包含每條item(圖文)中的Title埋合、Description备徐、PicUrl、Url甚颂,并組建一個(gè)NewsMessage.java ,繼承自BaseMessage.java蜜猾,作為我們整個(gè)圖文消息的多個(gè)item秀菱。
② 構(gòu)建單條item的實(shí)體類News.java 屬性如下:
③ 構(gòu)建整個(gè)圖文消息的實(shí)體類NewsMessage.java 屬性如下:
三、消息處理工具類MessageUtil中新增圖文消息相關(guān)處理方法
① 新增圖文消息轉(zhuǎn)XML結(jié)構(gòu)方法
我們之前說過蹭睡,微信只能接受XML結(jié)構(gòu)的消息內(nèi)容衍菱,那么我們可以參照之前文本消息轉(zhuǎn)XML的方法,新建一個(gè)方法轉(zhuǎn)化圖文消息:
② 新增初始化圖文消息方法
三肩豁、修改Servlet中的doPost方法脊串,發(fā)送圖文消息
此時(shí),我們就完成了圖文消息的回復(fù)發(fā)送清钥,有代碼可知琼锋,當(dāng)用戶回復(fù)數(shù)字3時(shí),可收到我們撰寫的圖文消息循捺,點(diǎn)開后將跳轉(zhuǎn)到指定網(wǎng)址斩例,效果如下:
【附錄】主要代碼如下:
MessageUtil工具類,圖文消息轉(zhuǎn)xml&初始化圖文消息方法:
/**
* 將圖文消息對(duì)象轉(zhuǎn)成XML
* @param
* @return
*/
public static String newsMessageToXml(NewsMessage newsMessage){
XStream xstream = new XStream();
//將xml的根節(jié)點(diǎn)替換成 ?默認(rèn)為NewsMessage的包名
xstream.alias("xml", newsMessage.getClass());
//同理从橘,將每條圖文消息News類的報(bào)名念赶,替換為標(biāo)簽
xstream.alias("item", new News().getClass());
return xstream.toXML(newsMessage);
}
/**
* 初始化圖文消息
*/
public static String initNewsMessage(String toUSerName,String fromUserName){
List newsList = new ArrayList();
NewsMessage newsMessage = new NewsMessage();
//組建一條圖文↓ ↓ ↓
News newsItem = new News();
newsItem.setTitle("歡迎來到杰瑞教育");
newsItem.setDescription("杰瑞教育,中國(guó)高端互聯(lián)網(wǎng)人才培訓(xùn)領(lǐng)導(dǎo)品牌恰力!");
newsItem.setPicUrl("http://www.jredu100.com/statics/images/index/top/logo.png");
newsItem.setUrl("www.jredu100.com");
newsList.add(newsItem);
//組裝圖文消息相關(guān)信息
newsMessage.setToUserName(fromUserName);
newsMessage.setFromUserName(toUSerName);
newsMessage.setCreateTime(new Date().getTime());
newsMessage.setMsgType(MESSAGE_NEWS);
newsMessage.setArticle(newsList);
newsMessage.setArticleCount(newsList.size());
//調(diào)用newsMessageToXml將圖文消息轉(zhuǎn)化為XML結(jié)構(gòu)并返回
return MessageUtil.newsMessageToXml(newsMessage);
}
原創(chuàng)內(nèi)容叉谜,歡迎轉(zhuǎn)載!轉(zhuǎn)載請(qǐng)注明出處踩萎!需要源碼下載停局,請(qǐng)聯(lián)系博主!微博@小風(fēng)飛魚