引言及内容概要

已经有几位读者抱怨"柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用",好吧,我错了,原本以为把基础API封装完、框架搭建好,再给出一个文本消息的使用示例,大家就能够照猫画虎的,或许是因为我的绘画功底太差,画出的那只猫本来就不像猫吧……
本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式。标题取名为"图文消息全攻略",这绝对不是标题党,是想借此机会把大家对图文消息相关的问题、疑虑、障碍全部清除掉。
图文消息的主要参数说明
通过微信官方的消息接口指南,可以看到对图文消息的参数介绍,如下图所示:
从图中可以了解到:
图文消息的多种表现形式
下面直接通过代码演示图文消息最主要的五种表现形式的用法,源代码如下:
package org.liufeng.course.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.liufeng.course.message.resp.Article;
import org.liufeng.course.message.resp.NewsMessage;
import org.liufeng.course.message.resp.TextMessage;
import org.liufeng.course.util.MessageUtil;
/**
* 核心服务类
*
* @author liufeng
* @date 2013-07-25
*/
public class CoreService {
/**
* 处理微信发来的请求
*
* @param request
* @return
*/
public static 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(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
textMessage.setFuncFlag(0);
// 由于href属性值必须用双引号引起,这与字符串本身的双引号冲突,所以要转义
textMessage.setContent("欢迎访问<a href=\"http://blog.csdn.net/lyq8479\">柳峰的博客</a>!");
// 将文本消息对象转换成xml字符串
respMessage = MessageUtil.textMessageToXml(textMessage);
// 文本消息
if (msgType.equals(MessageUtil.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(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
newsMessage.setFuncFlag(0);
List<Article> articleList = new ArrayList<Article>();
// 单图文消息
if ("1".equals(content)) {
Article article = new Article();
article.setTitle("微信公众帐号开发教程Java版");
article.setDescription("柳峰,80后,微信公众帐号开发经验4个月。为帮助初学者入门,特推出此系列教程,也希望借此机会认识更多同行!");
article.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");
article.setUrl("http://blog.csdn.net/lyq8479");
articleList.add(article);
// 设置图文消息个数
newsMessage.setArticleCount(articleList.size());
// 设置图文消息包含的图文集合
newsMessage.setArticles(articleList);
// 将图文消息对象转换成xml字符串
respMessage = MessageUtil.newsMessageToXml(newsMessage);
}
// 单图文消息---不含图片
else if ("2".equals(content)) {
Article article = new Article();
article.setTitle("微信公众帐号开发教程Java版");
// 图文消息中可以使用QQ表情、符号表情
article.setDescription("柳峰,80后," + emoji(0x1F6B9)
+ ",微信公众帐号开发经验4个月。为帮助初学者入门,特推出此系列连载教程,也希望借此机会认识更多同行!\n\n目前已推出教程共12篇,包括接口配置、消息封装、框架搭建、QQ表情发送、符号表情发送等。\n\n后期还计划推出一些实用功能的开发讲解,例如:天气预报、周边搜索、聊天功能等。");
// 将图片置为空
article.setPicUrl("");
article.setUrl("http://blog.csdn.net/lyq8479");
articleList.add(article);
newsMessage.setArticleCount(articleList.size());
newsMessage.setArticles(articleList);
respMessage = MessageUtil.newsMessageToXml(newsMessage);
}
// 多图文消息
else if ("3".equals(content)) {
Article article1 = new Article();
article1.setTitle("微信公众帐号开发教程\n引言");
article1.setDescription("");
article1.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");
article1.setUrl("http://blog.csdn.net/lyq8479/article/details/8937622");
Article article2 = new Article();
article2.setTitle("第2篇\n微信公众帐号的类型");
article2.setDescription("");
article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article2.setUrl("http://blog.csdn.net/lyq8479/article/details/8941577");
Article article3 = new Article();
article3.setTitle("第3篇\n开发模式启用及接口配置");
article3.setDescription("");
article3.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article3.setUrl("http://blog.csdn.net/lyq8479/article/details/8944988");
articleList.add(article1);
articleList.add(article2);
articleList.add(article3);
newsMessage.setArticleCount(articleList.size());
newsMessage.setArticles(articleList);
respMessage = MessageUtil.newsMessageToXml(newsMessage);
}
// 多图文消息---首条消息不含图片
else if ("4".equals(content)) {
Article article1 = new Article();
article1.setTitle("微信公众帐号开发教程Java版");
article1.setDescription("");
// 将图片置为空
article1.setPicUrl("");
article1.setUrl("http://blog.csdn.net/lyq8479");
Article article2 = new Article();
article2.setTitle("第4篇\n消息及消息处理工具的封装");
article2.setDescription("");
article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article2.setUrl("http://blog.csdn.net/lyq8479/article/details/8949088");
Article article3 = new Article();
article3.setTitle("第5篇\n各种消息的接收与响应");
article3.setDescription("");
article3.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article3.setUrl("http://blog.csdn.net/lyq8479/article/details/8952173");
Article article4 = new Article();
article4.setTitle("第6篇\n文本消息的内容长度限制揭秘");
article4.setDescription("");
article4.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article4.setUrl("http://blog.csdn.net/lyq8479/article/details/8967824");
articleList.add(article1);
articleList.add(article2);
articleList.add(article3);
articleList.add(article4);
newsMessage.setArticleCount(articleList.size());
newsMessage.setArticles(articleList);
respMessage = MessageUtil.newsMessageToXml(newsMessage);
}
// 多图文消息---最后一条消息不含图片
else if ("5".equals(content)) {
Article article1 = new Article();
article1.setTitle("第7篇\n文本消息中换行符的使用");
article1.setDescription("");
article1.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");
article1.setUrl("http://blog.csdn.net/lyq8479/article/details/9141467");
Article article2 = new Article();
article2.setTitle("第8篇\n文本消息中使用网页超链接");
article2.setDescription("");
article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");
article2.setUrl("http://blog.csdn.net/lyq8479/article/details/9157455");
Article article3 = new Article();
article3.setTitle("如果觉得文章对你有所帮助,请通过博客留言或关注微信公众帐号xiaoqrobot来支持柳峰!");
article3.setDescription("");
// 将图片置为空
article3.setPicUrl("");
article3.setUrl("http://blog.csdn.net/lyq8479");
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;
}
/**
* emoji表情转换(hex -> utf-16)
*
* @param hexEmoji
* @return
*/
public static String emoji(int hexEmoji) {
return String.valueOf(Character.toChars(hexEmoji));
}
}
上面代码实现的功能是当用户发送数字1-5时,分别回复五种不同表现形式的图文消息给用户,如下:
a)用户发送1,回复单图文消息。参考代码68~81行,运行效果如下:
b)用户发送2,回复单图文消息---不含图片。参考代码82~96行,运行效果如下:
说明:图文消息的标题、描述是可以包含QQ表情、符号表情的。
c)用户发送3,回复多图文消息。参考代码97~123行,运行效果如下:
说明:对于多图文消息,描述不会被显示,可以在标题使用换行符,使得显示更加美观。
d)用户发送4,回复多图文消息---首条消息不含图片。参考代码124~158行,运行效果如下:
e)用户发送5,回复多图文消息---最后一条消息不含图片。参考代码159~186行,运行效果如下:
可以看出,图文消息有着丰富的内容及多样化的表现形式,希望大家能够根据各自的特点及实际使用需要,合理地运用。
最后,根据实践经验,我对图文消息做一个使用总结:
1)一定要给图文消息的Url属性赋值。不管是单图文,还是多图文,或者是不含图片的图文,都有可能会被用户点击。如果Url为空,用户点击后将会打开一个空白页面,这给用户的体验是非常差的;
2)只有单图文的描述才会显示,多图文的描述不会被显示;
3)图文消息的标题、描述中可以使用QQ表情和符号表情。合理地运用表情符号,会使得消息更加生动;
4)图文消息的标题、描述中可以使用换行符。合理地使用换行符,会使得内容结构更加清晰;
5)图文消息的标题、描述中不支持超文本链接(html的<a>标签)。不只是技术上实现不了,就连逻辑上也说不通,因为一条图文消息的任何位置被点击,都将调用微信内置的浏览器打开Url,如果标题、描述里再放几个超链接,不知道点击该打开哪个页面。真搞不懂为什么有好几个同学都在问这个问题,难道设计成多图文不好吗?
6)图文消息的链接、图片链接可以使用外部域名下的资源,如本例中:柳峰的头像、博文的链接,都是指向CSDN网站的资源。在网上,甚至是微信官方交流群里,认为图文消息的Url、PicUrl不可以使用外链的大有人在,不知道这谣言从哪开始的,实践是检验真理的唯一标准!
7)使用指定大小的图片。第一条图文的图片大小建议为640*320,其他图文的图片大小建议为80*80。如果使用的图片太大,加载慢,而且耗流量;如果使用的图片太小,显示后会被拉伸,失真了很难看。
8)每条图文消息的图文建议控制在1-4条。这样在绝大多数终端上一屏能够显示完,用户扫一眼就能大概了解消息的主要内容,这样最有可能促使用户去点击并阅读。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# 微信公众号图文消息
# 公众号图文消息
# 微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
# 微信公众号 摇一摇周边功能开发
# php微信公众号js-sdk开发应用
# php微信公众平台交互与接口详解
# php微信公众号开发模式详解
# java微信公众号开发案例
# .NET微信公众号获取OpenID和用户信息
# 微信公众平台开发 数据库操作
# 微信公众号开发客服接口实例代码
# php版微信公众号接口实现发红包的方法
# 微信公众号 客服接口的开发实例详解
# 图文介绍报表与企业微信公众号集成方案
# 帐号
# 多图
# 不含
# 用户发送
# 表现形式
# 可以使用
# 借此机会
# 为空
# 第一条
# 换行符
# 转换成
# 五种
# 个月
# 图中
# 首条
# 都是
# 超链接
# 照猫画虎
# 几个
# 双引号
相关文章:
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站之星如何通过成品分离优化网站效率?
手机网站制作与建设方案,手机网站如何建设?
建站之星后台密码遗忘如何找回?
Java解压缩zip - 解压缩多个文件或文件夹实例
在线教育网站制作平台,山西立德教育官网?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
内网网站制作软件,内网的网站如何发布到外网?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
移民网站制作流程,怎么看加拿大移民官网?
如何快速完成中国万网建站详细流程?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何用IIS7快速搭建并优化网站站点?
css网站制作参考文献有哪些,易聊怎么注册?
微信小程序 input输入框控件详解及实例(多种示例)
建站主机如何安装配置?新手必看操作指南
官网网站制作腾讯审核要多久,联想路由器newifi官网
简历在线制作网站免费版,如何创建个人简历?
如何获取开源自助建站系统免费下载链接?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何快速搭建高效WAP手机网站?
如何在云服务器上快速搭建个人网站?
定制建站如何定义?其核心优势是什么?
制作企业网站建设方案,怎样建设一个公司网站?
建站之星代理费用多少?最新价格详情介绍
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何安全更换建站之星模板并保留数据?
实例解析Array和String方法
临沂网站制作企业,临沂第三中学官方网站?
建站之星如何配置系统实现高效建站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作网页的网站有哪些,电脑上怎么做网页?
如何用VPS主机快速搭建个人网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何访问已购建站主机并解决登录问题?
ui设计制作网站有哪些,手机UI设计网址吗?
如何在IIS服务器上快速部署高效网站?
如何快速启动建站代理加盟业务?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
利用JavaScript实现拖拽改变元素大小
如何配置IIS站点权限与局域网访问?
如何用花生壳三步快速搭建专属网站?
如何用好域名打造高点击率的自主建站?
建站主机功能解析:服务器选择与快速搭建指南
免费视频制作网站,更新又快又好的免费电影网站?
html制作网站的步骤有哪些,iapp如何添加网页?
如何在阿里云部署织梦网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。