转载于:http://blog.youkuaiyun.com/tuposky/article/details/40589319
引言:
上一章讲到了消息的接收和发送,但是讲的是最简单的文本信息。
在微信中用的最多的信息还是图文消息,本章就为大家讲解下微信图文消息是如何实现的。
包括单图文和多图文消息。
图文消息的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: 图文消息中的图片是可以引用外部资源的!
可加我的微信公众号一起讨论
微信公众号:andedaohang
或扫描二维码
转载请注明出处:http://blog.youkuaiyun.com/tuposky/article/details/40589319