引言及內容概要
已經有幾位讀者抱怨“柳峰只用到簡訊作為樣本,從來不提圖文訊息,都不知 道圖文訊息該如何使用”,好吧,我錯了,原本以為把基礎API封裝完、架構搭建好,再給出一個簡訊的 使用樣本,大家就能夠照貓畫虎的,或許是因為我的繪畫功底太差,畫出的那隻貓本來就不像貓吧……
本篇主要介紹微信公眾帳號開發中圖文訊息的使用,以及圖文訊息的幾種表現形式。標題取名為“圖 文訊息全攻略”,這絕對不是標題黨,是想藉此機會把大家對圖文訊息相關的問題、疑慮、障礙全部清除掉。
圖文訊息的主要參數說明
通過微信官方的訊息介面指南,可以看到對圖文訊息的參數介紹,如 下圖所示:
從圖中可以瞭解到:
1)圖文訊息的個數限制為10,也就是圖中ArticleCount的值(圖文訊息的個 數,限制在10條以內);
2)對於多圖文訊息,第一條圖文的圖片顯示為大圖,其他圖文的圖片顯示為 小圖;
3)第一條圖文的圖片大小建議為640*320,其他圖文的圖片大小建議為80*80;
好了, 瞭解這些,再結合第4篇文章所講的訊息及訊息處理工具的封裝,想要回複圖文訊息給使用者也就不是什麼難事 了。
圖文訊息的多種表現形式
下面直接通過代碼示範圖文訊息最主要的五種表現形式的用法, 原始碼如下:
package org.liufeng.course.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.liufeng.course.message.resp.Article; import org.liufeng.course.message.resp.NewsMessage; import org.liufeng.course.message.resp.TextMessage; import org.liufeng.course.util.MessageUtil; /** * 核心服務類 * * @author liufeng * @date 2013-07-25 */public class CoreService { /** * 處理微信發來的請求 * * @param request * @return */ public static String processRequest(HttpServletRequest request) { String respMessage = null; try { // xml請求解析 Map<String, String> requestMap = MessageUtil.parseXml(request); // 發送方帳號(open_id) String fromUserName = requestMap.get("FromUserName"); // 公眾帳號 String toUserName = requestMap.get("ToUserName"); // 訊息類型 String msgType = requestMap.get("MsgType"); // 預設回複此簡訊 TextMessage textMessage = new TextMessage(); textMessage.setToUserName(fromUserName); textMessage.setFromUserName(toUserName); textMessage.setCreateTime(new Date().getTime()); textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); textMessage.setFuncFlag(0); // 由於href屬性值必須用雙引號引起,這與字串本身的雙引號衝突,所以要轉義 textMessage.setContent("歡迎訪問<a href="http://blog.csdn.net/lyq8479">柳峰的部落格</a>!"); // 將簡訊對象轉換成xml字串 respMessage = MessageUtil.textMessageToXml(textMessage); // 簡訊 if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 接收使用者發送的簡訊內容 String content = requestMap.get("Content"); // 建立圖文訊息 NewsMessage newsMessage = new NewsMessage(); newsMessage.setToUserName(fromUserName); newsMessage.setFromUserName(toUserName); newsMessage.setCreateTime(new Date().getTime()); newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS); newsMessage.setFuncFlag(0); List<Article> articleList = new ArrayList<Article>(); // 單圖文訊息 if ("1".equals(content)) { Article article = new Article(); article.setTitle("微信公眾帳號開發教程Java版"); article.setDescription("柳峰,80後,微信公眾帳號開發經驗4個月。為協助初學者入門,特推出此系列教程,也希望藉此機會認識更多同行!"); article.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg"); article.setUrl("http://blog.csdn.net/lyq8479"); articleList.add(article); // 設定圖文訊息個數 newsMessage.setArticleCount(articleList.size()); // 設定圖文訊息包含的圖文集合 newsMessage.setArticles(articleList); // 將圖文訊息對象轉換成xml字串 respMessage = MessageUtil.newsMessageToXml(newsMessage); } // 單圖文訊息---不含圖片 else if ("2".equals(content)) { Article article = new Article(); article.setTitle("微信公眾帳號開發教程Java版"); // 圖文訊息中可以使用QQ表情、符號表情 article.setDescription("柳峰,80後," + emoji(0x1F6B9) + ",微信公眾帳號開發經驗4個月。為協助初學者入門,特推出此系列連載教程,也希望藉此機會認識更多同行!nn目前已推出教程共12篇,包括介面配置、訊息封裝、架構搭建、QQ表情發送、符號表情發送等。nn後期還計劃推出一些實用功能的開發講解,例如:天氣預報、周邊搜尋、聊天功能等。"); // 將圖片置為空白 article.setPicUrl(""); article.setUrl("http://blog.csdn.net/lyq8479"); articleList.add(article); newsMessage.setArticleCount(articleList.size()); newsMessage.setArticles(articleList); respMessage = MessageUtil.newsMessageToXml(newsMessage); } // 多圖文訊息 else if ("3".equals(content)) { Article article1 = new Article(); article1.setTitle("微信公眾帳號開發教程n引言"); article1.setDescription(""); article1.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg"); article1.setUrl("http://blog.csdn.net/lyq8479/article/details/8937622"); Article article2 = new Article(); article2.setTitle("第2篇n微信公眾帳號的類型"); article2.setDescription(""); article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg"); article2.setUrl("http://blog.csdn.net/lyq8479/article/details/8941577"); Article article3 = new Article(); article3.setTitle("第3篇n開發模式啟用及介面配置"); article3.setDescription(""); article3.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg"); article3.setUrl("http://blog.csdn.net/lyq8479/article/details/8944988"); articleList.add(article1); articleList.add(article2); articleList.add(article3); newsMessage.setArticleCount(articleList.size()); newsMessage.setArticles(articleList); respMessage = MessageUtil.newsMessageToXml(newsMessage); } // 多圖文訊息---首條訊息不含圖片 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); } // 多圖文訊息---最後一條訊息不含圖片 else if ("5".equals(content)) { Article article1 = new Article(); article1.setTitle("第7篇n簡訊中分行符號的使用"); article1.setDescription(""); article1.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg"); article1.setUrl("http://blog.csdn.net/lyq8479/article/details/9141467"); Article article2 = new Article(); article2.setTitle("第8篇n簡訊中使用網頁超連結"); article2.setDescription(""); article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg"); article2.setUrl("http://blog.csdn.net/lyq8479/article/details/9157455"); Article article3 = new Article(); article3.setTitle("如果覺得文章對你有所協助,請通過部落格留言或關注微信公眾帳號xiaoqrobot來支援柳峰!"); article3.setDescription(""); // 將圖片置為空白 article3.setPicUrl(""); article3.setUrl("http://blog.csdn.net/lyq8479"); articleList.add(article1); articleList.add(article2); articleList.add(article3); newsMessage.setArticleCount(articleList.size()); newsMessage.setArticles(articleList); respMessage = MessageUtil.newsMessageToXml(newsMessage); } } } catch (Exception e) { e.printStackTrace(); } return respMessage; } /** * emoji表情轉換(hex -> utf-16) * * @param hexEmoji * @return */ public static String emoji(int hexEmoji) { return String.valueOf(Character.toChars(hexEmoji)); } }