欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-25 23:15:54
...
引言及内容概要

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

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

图文消息的主要参数说明

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

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

从图中可以了解到:

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);
  87. 微信