在上一節課程中,我們學習了圖片消息的回復功能。根據微信公眾平台的消息類型顯示,微信共支持文本、圖片、語音、視頻、音樂、圖文等6種消息類型的回復:
其中,我們已經實現了文本、圖文、圖片等消息的回復處理,而語音、視頻兩種消息類型的功能與圖片消息完全一樣。均需使用我們寫好的文件上傳接口,上傳文件並獲得MediaID,從而使用MediaID推送圖片、語音、視頻。沒有學習過的同學,可進入傑瑞教育博客園繼續學習:http://www.cnblogs.com/jerehedu/p/6781456.html
今天,我們來學習最后一種消息類型——音樂消息的回復功能。
一、音樂消息數據結構
按照國際慣例,在學習一種新的消息回復的時候,我們都需要首先了解這種消息的數據結構以及XML 包結構。那么,讓我們進入微信開發幫助文檔看一下:
http://mp.weixin.qq.com/wiki/1/6239b44c206cab9145b1d52c67e6c551.html
我們可以清晰的看到這樣一段XML數據結構:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[TITLE]]></Title> <Description><![CDATA[DESCRIPTION]]></Description> <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl> <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl> <ThumbMediaId><![CDATA[media_id]]></ThumbMediaId> </Music> </xml>
官方給出的解釋如下:
在這當中,我們看到發送音樂消息,除了必備的標題、描述、鏈接等。還需要一張縮略圖id,那么聰明的同學應該知道怎么處理了……
二、上傳縮略圖並取得ID
上周我們已經實現了圖片的上傳功能,其中在測試類中上傳圖片是,我們選擇的上傳的類型為image:
根據上傳的媒體文件類型【媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)】我們只需要把image修改為thumb,即可實現縮略圖的上傳,並取得MediaID:
public static void main(String[] args) throws ClientProtocolException, IOException,
KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException { AccessToken token = WeiXinUtil.getAccessToken(); System.out.println("Access_Token為:"+token.getToken()); System.out.println("有效時間為:"+token.getExpiresIn()); String path = "E:/bg.jpg"; String MediaId = WeiXinUtil.upload(path, token.getToken(), "thumb");
}
注意:上傳文件類型只能是JPG且小於64KB。最終,得到thumb_media_id如下:4Ln9zjbEdBjMWS-TtYCmd89stx7CVmmmMGx1wdKul9-g6zOHQYJMukPEsC0pVd4h
得到縮略圖的ID以后,我們就可以進行音樂消息的組裝了。
三、組裝音樂消息實體對象
① 組裝Music.java實體
所需屬性如下,並提供Get/Set方法
② 組裝MusicMessage.java實體
所需屬性如下,並繼承自MusicMessage類。
四、編寫音樂對象轉XML方法
回到MessageUtil工具類,撰寫音樂對象轉XML方法:
public static String musicMessageToXml(MusicMessage musicMessage){ XStream xstream = new XStream(); xstream.alias("xml", musicMessage.getClass()); return xstream.toXML(musicMessage); }
五、編寫組裝音樂消息的方法
繼續在MessageUtil類中,進行音樂消息的組裝。當然,需要提前准備:縮略圖ID、音樂鏈接。其中,我在WebRoot下的res文件夾中,放了一個MP3音樂文件,因此可得到我自己的音樂鏈接:http://jerehedu.applinzi.com/res/達康書記不容易.mp3
/** * 組裝音樂消息 */ public static String initMusicMessage(String toUserName,String fromUserName){ String message = null; Music music = new Music(); music.setThumbMediaId("4Ln9zjbEdBjMWS-TtYCmd89stx7CVmmmMGx1wdKul9-g6zOHQYJMukPEsC0pVd4h"); music.setTitle("達康書記不同意"); music.setDescription("達康書記不容易——山東工商學院楊軍老師作詞作曲演唱"); music.setMusicUrl("http://jerehedu.applinzi.com/res/達康書記不容易.mp3"); music.setHQMusicUrl("http://jerehedu.applinzi.com/res/達康書記不容易.mp3"); MusicMessage musicMessage = new MusicMessage(); musicMessage.setFromUserName(toUserName); musicMessage.setToUserName(fromUserName); musicMessage.setMsgType(MESSAGE_MUSIC); musicMessage.setCreateTime(new Date().getTime()); musicMessage.setMusic(music); message = musicMessageToXml(musicMessage); return message; }
六、測試與運行
上述方法編寫完成后,回到Servlet中調用方法,當回復5的時候,接收音樂:
運行效果如下: