引言:
上一章讲到了消息的接收和发送,但是讲的是最简单的文本信息。
在微信中用的最多的信息还是图文消息,本章就为大家讲解下微信图文消息是如何实现的。
包括单图文和多图文消息。
图文消息的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
或扫描二维码
我所有的博客都搬到csdn了,以后所有的博客都会在csdn上更新,
CSDN博客地址:http://blog.csdn.net/tuposky
相关推荐
微信开发实例 微信公众平台开发教程-深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口)1.微信接口前期准备。由北风网提供,微信开发实例微信公众平台基础篇: 1)微信公众平台简介:开发...
微信公众平台开发入门教程上.pptx
内容简介: 本视频由《微信公众平台应用开发:方法、技巧与案例》的作者刘运强(网名:柳峰)讲解微信公众平台开发入门级相关知识的系列视频之一。内容涵盖:1.微信公众平台基础知识(服务号/订阅号、公众账号注册的...
[037] 微信公众帐号开发教程第13篇-图文消息全攻略 - 柳峰的专栏 - 博客频道 - CSDN.NET [038] 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应 - 柳峰的专栏 - 博客频道 - CSDN.NET [040] 微信公众帐号...
微信公众帐号开发教程第 13 篇-图文消息全攻略.85 微信公众帐号开发教程第 14 篇-自定义菜单的创建及菜单事件响应..95 微信公众帐号开发教程第 15 篇-自定义菜单的 view 类型(访问网页).. 117 微信公众帐号开发...
经过这3个公众帐号的开发,对目前微信公众平台开放的api算是比较熟悉了,像文本消息、图文消息、音乐消息、语音消息、位置消息等全部用到过,菜单也使用过。所以,就有了写微信公众帐号开发教程的想法,将学习到的...
他还是一位资深的Java软件开发工程师和Android/iOS移动应用开发工程师,活跃于CocoaChina、开源中国、CSDN等社区,CSDN博客专家,在CSDN博客撰写了系列微信公众平台二次开发的教程,深受欢迎并被广泛传播,也因此...
白狐微信助手管理系统,包括了会员、积分、素材、模版、订单、支付、微信图文排版、样式换色、公众号授权管理、图文同步,定时群发等,支持第三方登录和支付宝、微信等快捷支付。后台支持素材管理、会员管理、积分...
本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式。标题取名为"图文消息全攻略",这绝对不是标题党,是想借此机会把大家对图文消息相关的问题、疑虑、障碍全部清除掉。
共16期微信公众平台开发教程,微信平台的界面操作-->微信消息借口API-->新浪云平台SAE+PHP作为公众平台的服务端-->订阅事件响应-->SAE STORAGE-->收发文字、图文、音频、地理位置,处理退订事件-->SAE数据库、缓存、...
本文实例讲述了微信公众平台微信端分享功能。分享给大家供大家参考,具体如下: 背景 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客、问答,对于参差不齐的信息,自己也是有苦说不出,抽出...
本文实例讲述了微信公众平台开发之微信开发集成类的使用。分享给大家供大家参考,具体如下: 背景 这几天又在接触微信PHP方面的开发,认为之前写的文章确实有些乱,刚好发现了一个不错的集成类(看原始代码,出自...
本文实例讲述了微信公众平台开发获取用户Openid及个人信息。分享给大家供大家参考,具体如下: 前言: 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客、问答,对于参差不齐的信息,自己也是有...
主要介绍了微信公众平台开发ThinkPHP框架下微信支付功能,结合图文形式详细分析了基于thinkPHP框架的微信支付功能实现步骤、操作技巧与相关注意事项,需要的朋友可以参考下
图文结合,通俗易懂,教你如何用C#实现微信公众号接口,实现消息发送与自定义菜单。其中的源代码附下载地址,代码量少,几十KB。