各消息類型需要xml的數據包結構類型如下:
文本消息這里略過,這里簡單講述回復圖片消息和圖文消息:
由公眾平台的幫助文檔看用戶需要先調用上傳多媒體接口
上傳多媒體接口請求地址
http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=pStBAMU6VHXZsBGjubkX_pM5fTZS9IAGnSWp7AD_fVdLDiXvJVoysmDW417lX4Jz5mV8xuUct6nY9f1GCVrYfbygLFKNLyTJ5uBCvFRkE64YK-OkLWVnBsawsGdPwWnhTQOaAEAMJH&type=image
通過上傳一張圖片獲取mediaId:
接下來看下回復圖片消息時的報文結構:
貼一下簡單的代碼:
實體類:
對應的servlet類
結果如下:
2、回復單圖文消息:
}else if("2".equals(content)){//回復圖文消息
NewsMessage newsMessage = new NewsMessage();
newsMessage.setFromUserName(toUserName);
newsMessage.setToUserName(fromUserName);
newsMessage.setMsgType("news");
List<Article> articleList = new ArrayList<Article>();
Article article = new Article();
article.setTitle("牧流冰博客");
article.setPicUrl("");
article.setUrl("http://www.cnblogs.com/muliu");
article.setDescription("牧流冰,80后," + emoji(0x1F6B9)
+ ",微信公眾帳號開發經驗4個月。為幫助初學者入門,特推出此系列連載教程,也希望借此機會認識更多同行!\n\n目前已推出教程共12篇,包括接口配置、消息封裝、框架搭建、QQ表情發送、符號表情發送等。\n\n后期還計划推出一些實用功能的開發講解,例如:天氣預報、周邊搜索、聊天功能等。");
articleList.add(article);
newsMessage.setArticles(articleList);
newsMessage.setArticleCount(articleList.size());
respMessage = MessageUtil.newsMessageToXml(newsMessage);
測試結果:
3、多圖文消息:
// 多圖文消息---首條消息不含圖片
else if ("4".equals(content)) {
Article article1 = new Article();
article1.setTitle("微信公眾帳號開發教程Java版");
article1.setDescription("");
// 將圖片置為空
article1.setPicUrl("");
article1.setUrl("http://blog.csdn.net/lyq8479");
Article article2 = new Article();
article2.setTitle("第4篇\n消息及消息處理工具的封裝");
article2.setDescription("");
article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article2.setUrl("http://blog.csdn.net/lyq8479/article/details/8949088");
Article article3 = new Article();
article3.setTitle("第5篇\n各種消息的接收與響應");
article3.setDescription("");
article3.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article3.setUrl("http://blog.csdn.net/lyq8479/article/details/8952173");
Article article4 = new Article();
article4.setTitle("第6篇\n文本消息的內容長度限制揭秘");
article4.setDescription("");
article4.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article4.setUrl("http://blog.csdn.net/lyq8479/article/details/8967824");
articleList.add(article1);
articleList.add(article2);
articleList.add(article3);
articleList.add(article4);
newsMessage.setArticleCount(articleList.size());
newsMessage.setArticles(articleList);
respMessage = MessageUtil.newsMessageToXml(newsMessage);
}
測試結果略(包不包含圖片取決於PicUrl鏈接的地址)
最后,根據實踐經驗,我對圖文消息做一個使用總結:
1)一定要給圖文消息的Url屬性賦值。不管是單圖文,還是多圖文,或者是不含圖片的圖文,都有可能會被用戶點擊。如果Url為空,用戶點擊后將會打開一個空白頁面,這給用戶的體驗是非常差的;
2)只有單圖文的描述才會顯示,多圖文的描述不會被顯示;
3)圖文消息的標題、描述中可以使用QQ表情和符號表情。合理地運用表情符號,會使得消息更加生動;
4)圖文消息的標題、描述中可以使用換行符。合理地使用換行符,會使得內容結構更加清晰;
5)圖文消息的標題、描述中不支持超文本鏈接(html的<a>標簽)。不只是技術上實現不了,就連邏輯上也說不通,因為一條圖文消息的任何位置被點擊,都將調用微信內置的瀏覽器打開Url,如果標題、描述里再放幾個超鏈接,不知道點擊該打開哪個頁面。真搞不懂為什么有好幾個同學都在問這個問題,難道設計成多圖文不好嗎?
6)圖文消息的鏈接、圖片鏈接可以使用外部域名下的資源,如本例中:圖文消息的鏈接都是指向網站的資源。在網上,甚至是微信官方交流群里,認為圖文消息的Url、PicUrl不可以使用外鏈的大有人在,不知道這謠言從哪開始的,實踐是檢驗真理的唯一標准!
7)使用指定大小的圖片。第一條圖文的圖片大小建議為640*320,其他圖文的圖片大小建議為80*80。如果使用的圖片太大,加載慢,而且耗流量;如果使用的圖片太小,顯示后會被拉伸,失真了很難看。
8)每條圖文消息的圖文建議控制在1-4條。這樣在絕大多數終端上一屏能夠顯示完,用戶掃一眼就能大概了解消息的主要內容,這樣最有可能促使用戶去點擊並閱讀。