引言:
上一章講到了消息的接收和發送,但是講的是最簡單的文本信息。
在微信中用的最多的信息還是圖文消息,本章就爲大家講解下微信圖文消息是如何實現的。
包括單圖文和多圖文消息。
圖文消息的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>
從上面結構圖中可以看出要注意的幾點
1、圖文消息的條數最大限制爲10,
2、多圖文中列表中的第一個爲大圖,其餘爲小圖
注意:在多圖文模式下只有第一個可以顯示描述信息,其餘的都不顯示
瞭解了圖文消息的結構後,要發送圖文消息就簡單了。
我們之前已經封裝過消息處理的代碼和圖文消息的實體類,這裏就不囉嗦了,不知道的可以看上一章
下面我就上單圖文和多圖文消息的源代碼
package com.ifp.weixin.biz.core.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import com.ifp.weixin.biz.core.CoreService;
import com.ifp.weixin.constant.Constant;
import com.ifp.weixin.entity.Message.resp.Article;
import com.ifp.weixin.entity.Message.resp.NewsMessage;
import com.ifp.weixin.entity.Message.resp.TextMessage;
import com.ifp.weixin.util.MessageUtil;
@Service("coreService")
public class CoreServiceImpl implements CoreService {
public static Logger log = Logger.getLogger(CoreServiceImpl.class);
@Override
public 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(Constant.RESP_MESSAGE_TYPE_TEXT);
textMessage.setFuncFlag(0);
// 文本消息
if (msgType.equals(Constant.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(Constant.RESP_MESSAGE_TYPE_NEWS);
newsMessage.setFuncFlag(0);
List<Article> articleList = new ArrayList<Article>();
// 單圖文消息
if ("1".equals(content)) {
Article article = new Article();
article.setTitle("我是一條單圖文消息");
article.setDescription("我是描述信息,哈哈哈哈哈哈哈。。。");
article.setPicUrl("http://www.iteye.com/upload/logo/user/603624/2dc5ec35-073c-35e7-9b88-274d6b39d560.jpg");
article.setUrl("http://tuposky.iteye.com");
articleList.add(article);
// 設置圖文消息個數
newsMessage.setArticleCount(articleList.size());
// 設置圖文消息包含的圖文集合
newsMessage.setArticles(articleList);
// 將圖文消息對象轉換成xml字符串
respMessage = MessageUtil.newsMessageToXml(newsMessage);
}
// 多圖文消息
else if ("3".equals(content)) {
Article article1 = new Article();
article1.setTitle("我是一條多圖文消息");
article1.setDescription("");
article1.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20130913/2013091314543416032.jpg");
article1.setUrl("http://tuposky.iteye.com/blog/2008583");
Article article2 = new Article();
article2.setTitle("微信公衆平臺開發教程Java版(二)接口配置 ");
article2.setDescription("");
article2.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111243367254.jpg");
article2.setUrl("http://tuposky.iteye.com/blog/2008655");
Article article3 = new Article();
article3.setTitle("微信公衆平臺開發教程Java版(三) 消息接收和發送");
article3.setDescription("");
article3.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111291287031.jpg");
article3.setUrl("http://tuposky.iteye.com/blog/2017429");
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;
}
}
單個圖文和多圖文的處理方式其實是一樣的
單圖文的時候articleList 的size爲1
多圖文的時候爲多個。
運行的效果截圖如下:
用戶發送1,單圖文消息
用戶發送3 多圖文消息
Ps: 圖文消息中的圖片是可以引用外部資源的!
可加我的微信公衆號一起討論:
轉載請註明出處:http://blog.csdn.net/tuposky/article/details/40589319