博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Java语言开发微信公众平台(四)——图文消息的发送与响应
阅读量:6254 次
发布时间:2019-06-22

本文共 2998 字,大约阅读时间需要 9 分钟。

      在上一篇文章中我们实现了被关注回复与关键词回复功能。在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息。但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起来学习一下微信公众平台开发之图文消息的发送与响应

     、了解图文消息XML包结构

    相信一直学习我们系列博文的同学一定了解我们的“套路”了,首先,我们要来了解一下图文消息的XML包结构。微信官方提供如下参数信息:

 

 

      那么,了解了图文消息的XML包结构以后,我们就需要参照文本消息的回复,在我们的Java后台,组装我们的图文消息实体类。

     但是组装之前我们不难发现ToUserNameFromUserNameCreateTimeMsgType等参数在文本消息中也出现过而且在之后各种消息中都会出现那么回想一下我们封装的文本消息实体类很显然我们需要将这些相同的内容提取到一个父类中。下面,我们使用代码操作一下。

     、重新封装文本消息&图文消息实体类

    ① 提取文本消息实体类(子类)代码至消息实体类(父类)

     首先打开我们之前写好的文本消息实体类textMessage:

    找到里面共同的属性并将代码提取到父类中

     新建一个父类baseMessage.java,并将上述红线区域内的代码提取到父类中让我们的textMessage类继承此父类

    接下来我们分析一下微信的图文消息XML包结构

 

12345678
2
<![CDATA[title1]]>
<![CDATA[title]]>

 

     不难发现<Articles></Articles> 标签中可以有一个或多个<item></item>标签这也就对应着一条到多条图文消息。那么显然,在组装图文消息实体类时,我们需要构建两个实体类,分别为:News.Java 包含每条item(图文)中的TitleDescriptionPicUrlUrl 并组建一个NewsMessage.java ,继承自BaseMessage.java作为我们整个图文消息的多个item

    ② 构建单条item的实体类News.java 属性如下

    ③ 构建整个图文消息的实体类NewsMessage.java 属性如下

 

     、消息处理工具类MessageUtil中新增图文消息相关处理方法

 

    ① 新增图文消息转XML结构方法

     我们之前说过,微信只能接受XML结构的消息内容,那么我们可以参照之前文本消息转XML的方法,新建一个方法转化图文消息:

 

        ② 新增初始化图文消息方法

       、修改Servlet中的doPost方法发送图文消息

 

     此时我们就完成了图文消息的回复发送,有代码可知,当用户回复数字3时,可收到我们撰写的图文消息,点开后将跳转到指定网址,效果如下:

      【附录】 主要代码如下

      MessageUtil工具类图文消息转xml&初始化图文消息方法:

/**     * 将图文消息对象转成XML     * @param      * @return     */    public static String newsMessageToXml(NewsMessage newsMessage){        XStream xstream = new XStream();        //将xml的根节点替换成
默认为NewsMessage的包名 xstream.alias("xml", newsMessage.getClass()); //同理,将每条图文消息News类的报名,替换为
标签 xstream.alias("item", new News().getClass()); return xstream.toXML(newsMessage); } /** * 初始化图文消息 */ public static String initNewsMessage(String toUSerName,String fromUserName){ List
newsList = new ArrayList
(); NewsMessage newsMessage = new NewsMessage(); //组建一条图文↓ ↓ ↓ News newsItem = new News(); newsItem.setTitle("欢迎来到杰瑞教育"); newsItem.setDescription("杰瑞教育,中国高端互联网人才培训领导品牌!"); newsItem.setPicUrl("http://www.jredu100.com/statics/images/index/top/logo.png"); newsItem.setUrl("www.jredu100.com"); newsList.add(newsItem); //组装图文消息相关信息 newsMessage.setToUserName(fromUserName); newsMessage.setFromUserName(toUSerName); newsMessage.setCreateTime(new Date().getTime()); newsMessage.setMsgType(MESSAGE_NEWS); newsMessage.setArticle(newsList); newsMessage.setArticleCount(newsList.size()); //调用newsMessageToXml将图文消息转化为XML结构并返回 return MessageUtil.newsMessageToXml(newsMessage); }

 

转载于:https://www.cnblogs.com/jerehedu/p/6612214.html

你可能感兴趣的文章
查看 NPM、Yarn 全局安装的包
查看>>
[BZOJ 2140]稳定婚姻(强连通分量)
查看>>
人工智能工程师学习路线
查看>>
Nginx入门(2)反向代理和负载均衡
查看>>
MySQL库表状态查询
查看>>
【鲁班学院】干货分享!《面试必备之Mysql索引底层原理分析》
查看>>
第十一周项目0-是春哥啊
查看>>
poi做一个简单的EXCAL
查看>>
几种查询emacs帮助的办法
查看>>
Python_基础_(模块,time,random,os,sys,json,shelve,xml,序列化反序列化)
查看>>
异常:Project configuration is not up-to-date with pom.xml解决方案
查看>>
HDU2647 拓扑排序
查看>>
ThinkPHP/---微信支付PC流程
查看>>
JavaScript 05
查看>>
python 多线程编程之threading模块(Thread类)创建线程的三种方法
查看>>
实验三
查看>>
水仙花数
查看>>
P3308 [SDOI2014]LIS(最小割+退流)
查看>>
C语言作业--数据类型
查看>>
压位高精
查看>>