当前位置:   article > 正文

使用Java语言开发微信公众平台(四)——图文消息的发送与响应_java 微信公众号发送图片消息

java 微信公众号发送图片消息

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

     一、了解图文消息XML包结构

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

 

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

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

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

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

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

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

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

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

  1. <xml>
  2. <ToUserName><![CDATA[toUser]]></ToUserName>
  3. <FromUserName><![CDATA[fromUser]]></FromUserName>
  4. <CreateTime>12345678</CreateTime>
  5. <MsgType><![CDATA[news]]></MsgType>
  6. <ArticleCount>2</ArticleCount>
  7. <Articles>
  8. <item>
  9. <Title><![CDATA[title1]]></Title>
  10. <Description><![CDATA[description1]]></Description>
  11. <PicUrl><![CDATA[picurl]]></PicUrl>
  12. <Url><![CDATA[url]]></Url>
  13. </item>
  14. <item>
  15. <Title><![CDATA[title]]></Title>
  16. <Description><![CDATA[description]]></Description>
  17. <PicUrl><![CDATA[picurl]]></PicUrl>
  18. <Url><![CDATA[url]]></Url>
  19. </item>
  20. </Articles>
  21. </xml>

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

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

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

 

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

 

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

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

 

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

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

 

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

      【附录】 主要代码如下

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

  1. /**
  2. * 将图文消息对象转成XML
  3. * @param
  4. * @return
  5. */
  6. public static String newsMessageToXml(NewsMessage newsMessage){
  7. XStream xstream = new XStream();
  8. //将xml的根节点替换成<xml> 默认为NewsMessage的包名
  9. xstream.alias("xml", newsMessage.getClass());
  10. //同理,将每条图文消息News类的报名,替换为<item>标签
  11. xstream.alias("item", new News().getClass());
  12. return xstream.toXML(newsMessage);
  13. }
  14. /**
  15. * 初始化图文消息
  16. */
  17. public static String initNewsMessage(String toUSerName,String fromUserName){
  18. List<News> newsList = new ArrayList<News>();
  19. NewsMessage newsMessage = new NewsMessage();
  20. //组建一条图文↓ ↓ ↓
  21. News newsItem = new News();
  22. newsItem.setTitle("欢迎来到杰瑞教育");
  23. newsItem.setDescription("杰瑞教育,中国高端互联网人才培训领导品牌!");
  24. newsItem.setPicUrl("http://www.jredu100.com/statics/images/index/top/logo.png");
  25. newsItem.setUrl("www.jredu100.com");
  26. newsList.add(newsItem);
  27. //组装图文消息相关信息
  28. newsMessage.setToUserName(fromUserName);
  29. newsMessage.setFromUserName(toUSerName);
  30. newsMessage.setCreateTime(new Date().getTime());
  31. newsMessage.setMsgType(MESSAGE_NEWS);
  32. newsMessage.setArticle(newsList);
  33. newsMessage.setArticleCount(newsList.size());
  34. //调用newsMessageToXml将图文消息转化为XML结构并返回
  35. return MessageUtil.newsMessageToXml(newsMessage);
  36. }
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号