微信开发四: 图文消息

转载于:http://blog.csdn.net/tuposky/article/details/40589319

引言:

上一章讲到了消息的接收和发送,但是讲的是最简单的文本信息。

微信中用的最多的信息还是图文消息,本章就为大家讲解下微信图文消息是如何实现的。

包括单图文和多图文消息。

图文消息的XML数据包结构:

[xml]  view plain  copy
  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>  

   

 

从上面结构图中可以看出要注意的几点

1、图文消息的条数最大限制为10,

2、多图文中列表中的第一个为大图,其余为小图

注意:在多图文模式下只有第一个可以显示描述信息,其余的都不显示

了解了图文消息的结构后,要发送图文消息就简单了。

我们之前已经封装过消息处理的代码和图文消息的实体类,这里就不啰嗦了,不知道的可以看上一章

微信公众平台开发教程Java版(三) 消息接收和发送

 

下面我就上单图文和多图文消息的源代码

 

[java]  view plain  copy
  1. package com.ifp.weixin.biz.core.impl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import javax.servlet.http.HttpServletRequest;  
  9.   
  10. import org.apache.log4j.Logger;  
  11. import org.springframework.stereotype.Service;  
  12.   
  13. import com.ifp.weixin.biz.core.CoreService;  
  14. import com.ifp.weixin.constant.Constant;  
  15. import com.ifp.weixin.entity.Message.resp.Article;  
  16. import com.ifp.weixin.entity.Message.resp.NewsMessage;  
  17. import com.ifp.weixin.entity.Message.resp.TextMessage;  
  18. import com.ifp.weixin.util.MessageUtil;  
  19.   
  20. @Service("coreService")  
  21. public class CoreServiceImpl implements CoreService {  
  22.   
  23.     public static Logger log = Logger.getLogger(CoreServiceImpl.class);  
  24.   
  25.     @Override  
  26.     public String processRequest(HttpServletRequest request) {  
  27.         String respMessage = null;  
  28.         try {  
  29.             // xml请求解析  
  30.             Map<String, String> requestMap = MessageUtil.parseXml(request);  
  31.   
  32.             // 发送方帐号(open_id)  
  33.             String fromUserName = requestMap.get("FromUserName");  
  34.             // 公众帐号  
  35.             String toUserName = requestMap.get("ToUserName");  
  36.             // 消息类型  
  37.             String msgType = requestMap.get("MsgType");  
  38.   
  39.             TextMessage textMessage = new TextMessage();  
  40.             textMessage.setToUserName(fromUserName);  
  41.             textMessage.setFromUserName(toUserName);  
  42.             textMessage.setCreateTime(new Date().getTime());  
  43.             textMessage.setMsgType(Constant.RESP_MESSAGE_TYPE_TEXT);  
  44.             textMessage.setFuncFlag(0);  
  45.               
  46.             // 文本消息  
  47.             if (msgType.equals(Constant.REQ_MESSAGE_TYPE_TEXT)) {  
  48.                 // 接收用户发送的文本消息内容  
  49.                 String content = requestMap.get("Content");  
  50.   
  51.                 // 创建图文消息  
  52.                 NewsMessage newsMessage = new NewsMessage();  
  53.                 newsMessage.setToUserName(fromUserName);  
  54.                 newsMessage.setFromUserName(toUserName);  
  55.                 newsMessage.setCreateTime(new Date().getTime());  
  56.                 newsMessage.setMsgType(Constant.RESP_MESSAGE_TYPE_NEWS);  
  57.                 newsMessage.setFuncFlag(0);  
  58.   
  59.                 List<Article> articleList = new ArrayList<Article>();  
  60.                 // 单图文消息  
  61.                 if ("1".equals(content)) {  
  62.                     Article article = new Article();  
  63.                     article.setTitle("我是一条单图文消息");  
  64.                     article.setDescription("我是描述信息,哈哈哈哈哈哈哈。。。");  
  65.                     article.setPicUrl("http://www.iteye.com/upload/logo/user/603624/2dc5ec35-073c-35e7-9b88-274d6b39d560.jpg");  
  66.                     article.setUrl("http://tuposky.iteye.com");  
  67.                     articleList.add(article);  
  68.                     // 设置图文消息个数  
  69.                     newsMessage.setArticleCount(articleList.size());  
  70.                     // 设置图文消息包含的图文集合  
  71.                     newsMessage.setArticles(articleList);  
  72.                     // 将图文消息对象转换成xml字符串  
  73.                     respMessage = MessageUtil.newsMessageToXml(newsMessage);  
  74.                 }  
  75.                 // 多图文消息  
  76.                 else if ("3".equals(content)) {  
  77.                     Article article1 = new Article();  
  78.                     article1.setTitle("我是一条多图文消息");  
  79.                     article1.setDescription("");  
  80.                     article1.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20130913/2013091314543416032.jpg");  
  81.                     article1.setUrl("http://tuposky.iteye.com/blog/2008583");  
  82.   
  83.                     Article article2 = new Article();  
  84.                     article2.setTitle("微信公众平台开发教程Java版(二)接口配置 ");  
  85.                     article2.setDescription("");  
  86.                     article2.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111243367254.jpg");  
  87.                     article2.setUrl("http://tuposky.iteye.com/blog/2008655");  
  88.   
  89.                     Article article3 = new Article();  
  90.                     article3.setTitle("微信公众平台开发教程Java版(三) 消息接收和发送");  
  91.                     article3.setDescription("");  
  92.                     article3.setPicUrl("http://www.isic.cn/viewResourcesAction//logo/20131021/2013102111291287031.jpg");  
  93.                     article3.setUrl("http://tuposky.iteye.com/blog/2017429");  
  94.   
  95.                     articleList.add(article1);  
  96.                     articleList.add(article2);  
  97.                     articleList.add(article3);  
  98.                     newsMessage.setArticleCount(articleList.size());  
  99.                     newsMessage.setArticles(articleList);  
  100.                     respMessage = MessageUtil.newsMessageToXml(newsMessage);  
  101.                 }   
  102.             }  
  103.         } catch (Exception e) {  
  104.             e.printStackTrace();  
  105.         }  
  106.         return respMessage;  
  107.     }  
  108.   
  109. }  

 

单个图文和多图文的处理方式其实是一样的

单图文的时候articleList 的size为1

多图文的时候为多个。

 

运行的效果截图如下:

用户发送1,单图文消息

 

用户发送3 多图文消息

 

 Ps: 图文消息中的图片是可以引用外部资源的!

 

 

 可加我的微信公众号一起讨论

微信公众号:andedaohang

或扫描二维码



 

 转载请注明出处:http://blog.csdn.net/tuposky/article/details/40589319

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值