当前位置:Gxlcms > PHP教程 > 微信公众帐号开发教程第13篇-图文消息全攻略_PHP教程

微信公众帐号开发教程第13篇-图文消息全攻略_PHP教程

时间:2021-07-01 10:21:17 帮助过:39人阅读

引言及内容概要

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

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

图文消息的主要参数说明

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

\

从图中可以了解到:

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

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

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

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

图文消息的多种表现形式

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

[java] view plaincopy
  1. package org.liufeng.course.service;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.servlet.http.HttpServletRequest;
  7. import org.liufeng.course.message.resp.Article;
  8. import org.liufeng.course.message.resp.NewsMessage;
  9. import org.liufeng.course.message.resp.TextMessage;
  10. import org.liufeng.course.util.MessageUtil;
  11. /**
  12. * 核心服务类
  13. *
  14. * @author liufeng
  15. * @date 2013-07-25
  16. */
  17. public class CoreService {
  18. /**
  19. * 处理微信发来的请求
  20. *
  21. * @param request
  22. * @return
  23. */
  24. public static String processRequest(HttpServletRequest request) {
  25. String respMessage = null;
  26. try {
  27. // xml请求解析
  28. Map requestMap = MessageUtil.parseXml(request);
  29. // 发送方帐号(open_id)
  30. String fromUserName = requestMap.get("FromUserName");
  31. // 公众帐号
  32. String toUserName = requestMap.get("ToUserName");
  33. // 消息类型
  34. String msgType = requestMap.get("MsgType");
  35. // 默认回复此文本消息
  36. TextMessage textMessage = new TextMessage();
  37. textMessage.setToUserName(fromUserName);
  38. textMessage.setFromUserName(toUserName);
  39. textMessage.setCreateTime(new Date().getTime());
  40. textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
  41. textMessage.setFuncFlag(0);
  42. // 由于href属性值必须用双引号引起,这与字符串本身的双引号冲突,所以要转义
  43. textMessage.setContent("欢迎访问柳峰的博客!");
  44. // 将文本消息对象转换成xml字符串
  45. respMessage = MessageUtil.textMessageToXml(textMessage);
  46. // 文本消息
  47. if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
  48. // 接收用户发送的文本消息内容
  49. String content = requestMap.get("Content");
  50. // 创建图文消息
  51. NewsMessage newsMessage = new NewsMessage();
  52. newsMessage.setToUserName(fromUserName);
  53. newsMessage.setFromUserName(toUserName);
  54. newsMessage.setCreateTime(new Date().getTime());
  55. newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
  56. newsMessage.setFuncFlag(0);
  57. List articleList = new ArrayList();
  58. // 单图文消息
  59. if ("1".equals(content)) {
  60. Article article = new Article();
  61. article.setTitle("微信公众帐号开发教程Java版");
  62. article.setDescription("柳峰,80后,微信公众帐号开发经验4个月。为帮助初学者入门,特推出此系列教程,也希望借此机会认识更多同行!");
  63. article.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");
  64. article.setUrl("http://blog.csdn.net/lyq8479");
  65. articleList.add(article);
  66. // 设置图文消息个数
  67. newsMessage.setArticleCount(articleList.size());
  68. // 设置图文消息包含的图文集合
  69. newsMessage.setArticles(articleList);
  70. // 将图文消息对象转换成xml字符串
  71. respMessage = MessageUtil.newsMessageToXml(newsMessage);
  72. }
  73. // 单图文消息---不含图片
  74. else if ("2".equals(content)) {
  75. Article article = new Article();
  76. article.setTitle("微信公众帐号开发教程Java版");
  77. // 图文消息中可以使用QQ表情、符号表情
  78. article.setDescription("柳峰,80后," + emoji(0x1F6B9)
  79. + ",微信公众帐号开发经验4个月。为帮助初学者入门,特推出此系列连载教程,也希望借此机会认识更多同行!\n\n目前已推出教程共12篇,包括接口配置、消息封装、框架搭建、QQ表情发送、符号表情发送等。\n\n后期还计划推出一些实用功能的开发讲解,例如:天气预报、周边搜索、聊天功能等。");
  80. // 将图片置为空
  81. article.setPicUrl("");
  82. article.setUrl("http://blog.csdn.net/lyq8479");
  83. articleList.add(article);
  84. newsMessage.setArticleCount(articleList.size());
  85. newsMessage.setArticles(articleList);
  86. respMessage = MessageUtil.newsMessageToXml(newsMessage);

人气教程排行