微信公众平台开发教程Java版(四) 图文消息
引言:
上一章讲到了消息的接收和发送,但是讲的是最简单的文本信息。
在微信中用的最多的信息还是图文消息,本章就为大家讲解下微信图文消息是如何实现的。
包括单图文和多图文消息。
图文消息的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、多图文中列表中的第一个为大图,其余为小图
注意:在多图文模式下只有第一个可以显示描述信息,其余的都不显示
了解了图文消息的结构后,要发送图文消息就简单了。
我们之前已经封装过消息处理的代码和图文消息的实体类,这里就不啰嗦了,不知道的可以看上一章
微信公众平台开发教程Java版(三) 消息接收和发送
?
下面我就上单图文和多图文消息的源代码
?
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);@Overridepublic 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: 图文消息中的图片是可以引用外部资源的!
?
?
?