上篇已經成功響應了關注事件,也實現了文本消息的發送,這篇開始圖文消息處理, 微信中最常用的消息類型就是圖文消息了,因為它圖文並茂,最能表達信息。 圖文消息在微信中的接口定義如下:
1 <xml> 2 <ToUserName><![CDATA[toUser]]></ToUserName> 3 <FromUserName><![CDATA[fromUser]]></FromUserName> 4 <CreateTime>12345678</CreateTime> 5 <MsgType><![CDATA[news]]></MsgType> 6 <ArticleCount>2</ArticleCount> 7 <Articles> 8 <item> 9 <Title><![CDATA[title1]]></Title> 10 <Description><![CDATA[description1]]></Description> 11 <PicUrl><![CDATA[picurl]]></PicUrl> 12 <Url><![CDATA[url]]></Url> 13 </item> 14 <item> 15 <Title><![CDATA[title]]></Title> 16 <Description><![CDATA[description]]></Description> 17 <PicUrl><![CDATA[picurl]]></PicUrl> 18 <Url><![CDATA[url]]></Url> 19 </item> 20 </Articles> 21 </xml>
加上文字定義:
很多人第一次看這個文檔時會感覺看不懂, 因為它這寫的實在是不太直觀, 多看幾眼就明白了, 開發者、用戶、時間等等跟文本消息及其他消息都一樣, 唯一不一樣的是圖文消息中articles節點又是個多條記錄的節點,它跟其他節點同級,具體文章相當於子級, 這個看了之前文章中定義圖文消息模型就很直觀了,我把文章單獨作為一個list當作圖文消息模型中的一個屬性來用。
我們這里模擬幾條數據
1 SNews mN = new SNews(); 2 mN.FromUserName = ReadXml.ReadModel("ToUserName", model); 3 mN.ToUserName = ReadXml.ReadModel("FromUserName", model); 4 mN.CreateTime = long.Parse(ReadXml.ReadModel("CreateTime", model)); 5 mN.MsgType = "news"; 6 7 // 以下為文章內容, 實際使用時,此處應該是一個跟數據庫交互的方法,查詢出文章 8 //文章條數, 文章內容等 都應該由數據庫查詢出來的數據決定 這里測試,就模擬幾條 9 10 mN.ArticleCount =5; 11 List<ArticlesModel> listNews = new List<ArticlesModel>(); 12 for (int i = 0; i < 6;i++ ) 13 { 14 ArticlesModel ma = new ArticlesModel(); 15 ma.Title ="這是第"+i.ToString()+"篇文章"; 16 ma.Description ="--"+i.ToString()+"--"; 17 ma.PicUrl = "http://image6.tuku.cn/pic/wallpaper/dongwu/taipingniaogaoqingbizhi/s00"+(i+1).ToString()+".jpg"; 18 ma.Url = "http://www.cnblogs.com/mochen/"; 19 listNews.Add(ma); 20 } 21 mN.Articles = listNews; 22 ReadXml.ResponseToEnd(DALWei.SendNews(mN));
demo是輸入?或?或幫助 回復文字菜單, 輸入其他字符回復圖文
效果:
圖文消息超過1篇時默認第一篇是大圖顯示,且每一篇都僅僅顯示標題, 當只有一條時會顯示簡介,如圖:
無論有多少條文章,每篇文章點擊都會打開所賦值的文章鏈接, 此時就相當於打開了一個瀏覽器訪問你的web頁面,這個頁面你可以自行設計成任何樣子, 由於手機大小不一,這個頁面設計時最好考慮下屏幕適配,做成響應式布局吧
好了,圖文消息就是這么多,至此為止,微信所有的基礎內容基本上都完成了, 在第7篇我會放出完整的demo版源碼,保證拿回去扔到服務器上指定個域名,然后到微信官方填寫一下,立刻就能看到效果......