使用Java語言開發微信公衆平臺(四)——圖文消息的發送與響應

      在上一篇文章中咱們實現了被關注回覆與關鍵詞回覆功能。在用戶關注的時候自動推送功能菜單,並根據用戶輸入的關鍵詞,回覆特定信息。可是,咱們只能回覆文本消息給用戶,如何纔回復一條圖文消息呢?本週,咱們一塊兒來學習一下微信公衆平臺開發之圖文消息的發送與響應java

     、瞭解圖文消息XML包結構微信

    相信一直學習咱們系列博文的同窗必定了解咱們的「套路」了,首先,咱們要來了解一下圖文消息的XML包結構。微信官方提供以下參數信息:微信公衆平臺

 

 

      那麼,瞭解了圖文消息的XML包結構之後,咱們就須要參照文本消息的回覆,在咱們的Java後臺,組裝咱們的圖文消息實體類。curl

     可是組裝以前咱們不難發現ToUserNameFromUserNameCreateTimeMsgType等參數在文本消息中也出現過並且在以後各類消息中都會出現那麼回想一下咱們封裝的文本消息實體類很顯然咱們須要將這些相同的內容提取到一個父類中。下面,咱們使用代碼操做一下。工具

     、從新封裝文本消息&圖文消息實體類學習

    ① 提取文本消息實體類(子類)代碼至消息實體類(父類)url

     首先打開咱們以前寫好的文本消息實體類textMessage:spa

    找到裏面共同的屬性並將代碼提取到父類中3d

     新建一個父類baseMessage.java,並將上述紅線區域內的代碼提取到父類中讓咱們的textMessage類繼承此父類code

    接下來咱們分析一下微信的圖文消息XML包結構

 

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[title1]]></Title>
<Description><![CDATA[description1]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
<item>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
</Articles>
</xml>

 

     不難發現<Articles></Articles> 標籤中能夠有一個或多個<item></item>標籤這也就對應着一條到多條圖文消息。那麼顯然,在組裝圖文消息實體類時,咱們須要構建兩個實體類,分別爲:News.Java 包含每條item(圖文)中的TitleDescriptionPicUrlUrl 並組建一個NewsMessage.java ,繼承自BaseMessage.java做爲咱們整個圖文消息的多個item

    ② 構建單條item的實體類News.java 屬性以下

    ③ 構建整個圖文消息的實體類NewsMessage.java 屬性以下

 

     、消息處理工具類MessageUtil中新增圖文消息相關處理方法

 

    ① 新增圖文消息轉XML結構方法

     咱們以前說過,微信只能接受XML結構的消息內容,那麼咱們能夠參照以前文本消息轉XML的方法,新建一個方法轉化圖文消息:

 

        ② 新增初始化圖文消息方法

       、修改Servlet中的doPost方法發送圖文消息

 

     此時咱們就完成了圖文消息的回覆發送,有代碼可知,當用戶回覆數字3時,可收到咱們撰寫的圖文消息,點開後將跳轉到指定網址,效果以下:

      【附錄】 主要代碼以下

      MessageUtil工具類圖文消息轉xml&初始化圖文消息方法:

/**
     * 將圖文消息對象轉成XML
     * @param 
     * @return
     */
    public static String newsMessageToXml(NewsMessage newsMessage){
        XStream xstream = new XStream();
        //將xml的根節點替換成<xml>  默認爲NewsMessage的包名
        xstream.alias("xml", newsMessage.getClass());
        //同理,將每條圖文消息News類的報名,替換爲<item>標籤
        xstream.alias("item", new News().getClass());
        return xstream.toXML(newsMessage);
    }
    
    
    /**
     * 初始化圖文消息
     */
    public static String initNewsMessage(String toUSerName,String fromUserName){
        List<News> newsList = new ArrayList<News>();
        NewsMessage newsMessage = new NewsMessage();
        //組建一條圖文↓ ↓ ↓
        News newsItem = new News();
        newsItem.setTitle("歡迎來到傑瑞教育");
        newsItem.setDescription("傑瑞教育,中國高端互聯網人才培訓領導品牌!");
        newsItem.setPicUrl("http://www.jredu100.com/statics/images/index/top/logo.png");
        newsItem.setUrl("www.jredu100.com");
        newsList.add(newsItem);
        
        //組裝圖文消息相關信息
        newsMessage.setToUserName(fromUserName);
        newsMessage.setFromUserName(toUSerName);
        newsMessage.setCreateTime(new Date().getTime());
        newsMessage.setMsgType(MESSAGE_NEWS);
        newsMessage.setArticle(newsList);
        newsMessage.setArticleCount(newsList.size());
        
        //調用newsMessageToXml將圖文消息轉化爲XML結構並返回
        return MessageUtil.newsMessageToXml(newsMessage);
    }
相關文章
相關標籤/搜索