微信公众帐号开发教程(13) 图文消息全攻略

引言及内容概要

已经有几位读者抱怨“柳峰只用到文本消息作为示例,从来不提图文消息,都不知 道图文消息该如何使用”,好吧,我错了,原本以为把基础API封装完、框架搭建好,再给出一个文本消息的 使用示例,大家就能够照猫画虎的,或许是因为我的绘画功底太差,画出的那只猫本来就不像猫吧……

本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式。标题取名为“图 文消息全攻略”,这绝对不是标题党,是想借此机会把大家对图文消息相关的问题、疑虑、障碍全部清除掉。

图文消息的主要参数说明

通过微信官方的消息接口指南,可以看到对图文消息的参数介绍,如 下图所示:

从图中可以了解到:

1)图文消息的个数限制为10,也就是图中ArticleCount的值(图文消息的个 数,限制在10条以内);

2)对于多图文消息,第一条图文的图片显示为大图,其他图文的图片显示为 小图;

3)第一条图文的图片大小建议为640*320,其他图文的图片大小建议为80*80;

好了, 了解这些,再结合第4篇文章所讲的消息及消息处理工具的封装,想要回复图文消息给用户也就不是什么难事 了。

图文消息的多种表现形式

下面直接通过代码演示图文消息最主要的五种表现形式的用法, 源代码如下:

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个月。为帮助初学者入门,特推出此系列连载教程,也希望借此机会认识更多同行!nn目前已推出教程共12篇,包括接口配置、消息封装、框架搭建、QQ表情

发送、符号表情发送等。nn后期还计划推出一些实用功能的开发讲解,例如:天气预报、周边搜索、聊天功能等。");
                    // 将图片置为空
                    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));
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索csdn
, http
, csdn博客
, 消息
, 图文消息
, requestmapping
, 帐号
, article
, 消息为空
, 微信图片处理
, java微信
, 微信,C#,.net
, 图文
发送图文消息
微信公众号图文消息、微信公众图文消息模板、微信公众平台图文消息、公众平台图文消息模板、公众号图文消息,以便于您获取更多的相关知识。

时间: 2025-01-02 03:39:50

微信公众帐号开发教程(13) 图文消息全攻略的相关文章

微信公众帐号开发教程之图文消息全攻略_java

引言及内容概要 已经有几位读者抱怨"柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用",好吧,我错了,原本以为把基础API封装完.框架搭建好,再给出一个文本消息的使用示例,大家就能够照猫画虎的,或许是因为我的绘画功底太差,画出的那只猫本来就不像猫吧-- 本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式.标题取名为"图文消息全攻略",这绝对不是标题党,是想借此机会把大家对图文消息相关的问题.疑虑.障碍全部清除掉. 图文消

微信公众帐号开发教程(六) 文本消息的内容长度限制揭秘

相信不少朋友都遇到过这样的问题:当发送的文本消息内容过长时,微信将不做任何响应.那么到底微信 允许的文本消息的最大长度是多少呢?我们又该如何计算文本的长度呢?为什么还有些人反应微信好像支持的 文本消息最大长度在1300多呢?这篇文章会彻底解除大家的疑问. 接口文档中对消息长度限制为 2048 开发教程(六) 文本消息的内容长度限制揭秘-揭秘时政的微信公众号"> 可以看到,接口文档中写的很明确:回复的消息内容长度不超过2048字节.那为什么很多人测试反应消息 内容长度在1300多字节时,微信

微信公众帐号开发教程(八) 文本消息中使用网页超链接

本文主要介绍网页超链接的作用以及如何在文本消息中使用网页超链接. 网页超链接的作用 我想但凡是熟悉HTML的朋友,对超链接一定不会陌生.而今天我们要讨论和使用的只是超链接中的其 中一种---网页超链接,即使用HTML中的<a>标签将某段文字链接到其他网页上去,示例如下: <a href="http://blog.csdn.net/lyq8479">柳峰的博客</a> 上面是一段标 准的HTML代码,实现了一个网页超链接,即将"柳峰的博客&q

微信公众帐号开发教程(七) 文本消息中换行符的使用

本篇文章主要介绍在文本消息中使用换行符的好处以及如何使用换行符. 最近一个月虽然抽不出时 间写博客,但却一直在认真答复大家提出的问题.收到这么多的回复.关注和答谢,还是蛮有成就感的,让我 觉得做这件事越来越有意义,更加坚定了我继续写下去的决心.经过前面六篇文章的讲解,相信在看文章的你 ,已经掌握了微信公众帐号的基础开发知识(基于Java),如框架搭建.API封装.消息接收与回复等:接下 来的系列文章将专注于讲解公众帐号开发中的技巧及实用功能的开发(如天气查询.周边搜索.人机对话等) . 使用换行

微信公众帐号开发教程(五) 各种消息的接收与响应

前一篇文章里我们已经把微信公众平台接口中消息及相关操作都进行了封装,本章节将主要介绍如何接收 微信服务器发送的消息并做出响应. 明确在哪接收消息 从微信公众平台接口消息指南中可以了 解到,当用户向公众帐号发消息时,微信服务器会将消息通过POST方式提交给我们在接口配置信息中填写的 URL,而我们就需要在URL所指向的请求处理类CoreServlet的doPost方法中接收消息.处理消息和响应消息. 接收.处理.响应消息 下面先来看我已经写好的CoreServlet的完整代码: package o

微信公众帐号开发教程之文本消息长度限制详解

接口文档中对消息长度限制为2048 开发教程之文本消息长度限制详解-java公众平台开发详解"> 可以看到,接口文档中写的很明确:回复的消息内容长度不超过2048字节.那为什么很多人测试反应消息内容长度在1300多字节时,微信就不响应了呢?我想这问题应该在这部分人没有搞清楚到底该如何计算文本的字节数. 如何正确计算文本所占字节数 计算文本(字符串)所占字节数,大家第一个想到的应该就是String类的getBytes()方法,该方法返回的是字符串对应的字节数组,再计算数组的length就能够

微信公众帐号开发教程(一) 引言

接触微信公众帐号已经有两个多月的时间了,在这期间,除了陆续完善个人公众帐号xiaoqrobot以外,还 带领团队为公司开发了两个企业应用:一个是普通类型的公众帐号,另一个是会议类型的公众帐号.经过这3 个公众帐号的开发,对目前微信公众平台开放的api算是比较熟悉了,像文本消息.图文消息.音乐消息.语 音消息.位置消息等全部用到过,菜单也使用过.所以,就有了写微信公众帐号开发教程的想法,将学习到的 技术经验分享出来,帮助更多需要的朋友,也希望借此认识同行的朋友,共同交流,共同进步! 下面 将对即将

微信公众帐号开发教程(十二) 符号表情的发送(下)

引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何 在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使用的一些符号表 情,在微信的符号表情选择栏里根本找不到,并且在上篇文章给出的符号表情代码表(Unified版)中也没有 ,那这些表情是如何发送的呢?"如下面两张图所示的符号表情"情侣"和"公共汽车". 本文主要介绍以下内容:1)如 何在微信上使用更多的符号表

微信公众帐号开发教程(十一) 符号表情的发送(上)

题外话(可以略过) 相信这篇文章已经让大家等的太久了,不是我故弄玄虚.吊大家胃口,而是写 一篇文章真的需要花太多的时间.也许一篇文章,你们花3-5分钟就看完了.就学会掌握了,而我却要花2-3个 小时的时间来完成,也许只有用心写过文章的人才能体会,希望大家能够相互体谅! 也曾经有人对我 说,我写的东西太初级,都是入门级的东西.好吧,我承认众口难调,很难满足所有的读者,再加上我自己也 只是个新手,一个4月前才听说微信公众平台这个词的初学者,谢谢你们以不同方式对我的激励,我会更加努 力的! 第9篇文章