zoukankan      html  css  js  c++  java
  • 微信公众号实现回复图文消息

    图文消息的主要参数说明

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

    从上图可以了解到:

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

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

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

    下面开始实现:

    请求消息的基类:

     1 import com.thoughtworks.xstream.annotations.XStreamAlias;
     2 
     3 import java.io.Serializable;
     4 
     5 /**
     6  * @author inchlifc
     7  */
     8 public class BaseMessage implements Serializable {
     9     @XStreamAlias("ToUserName")
    10     @XStreamCDATA
    11     private String ToUserName;
    12 
    13     @XStreamAlias("FromUserName")
    14     @XStreamCDATA
    15     private String FromUserName;
    16 
    17     @XStreamAlias("CreateTime")
    18     private Long CreateTime;
    19 
    20     @XStreamAlias("MsgType")
    21     @XStreamCDATA
    22     private String MsgType;
    23 
    24     public BaseMessage() {
    25         super();
    26     }
    27 
    28     public BaseMessage(String fromUserName, String toUserName) {
    29         super();
    30         FromUserName = fromUserName;
    31         ToUserName = toUserName;
    32         CreateTime = System.currentTimeMillis();
    33     }
    34 
    35     public String getToUserName() {
    36         return ToUserName;
    37     }
    38 
    39     public void setToUserName(String toUserName) {
    40         ToUserName = toUserName;
    41     }
    42 
    43     public String getFromUserName() {
    44         return FromUserName;
    45     }
    46 
    47     public void setFromUserName(String fromUserName) {
    48         FromUserName = fromUserName;
    49     }
    50 
    51     public Long getCreateTime() {
    52         return CreateTime;
    53     }
    54 
    55     public void setCreateTime(Long createTime) {
    56         CreateTime = createTime;
    57     }
    58 
    59     public String getMsgType() {
    60         return MsgType;
    61     }
    62 
    63     public void setMsgType(String msgType) {
    64         MsgType = msgType;
    65     }
    66 }

    图文消息类:

     1 import com.thoughtworks.xstream.annotations.XStreamAlias;
     2 
     3 import java.util.List;
     4 
     5 @XStreamAlias("xml")
     6 public class ArticlesMessage extends BaseMessage {
     7     @XStreamAlias("ArticleCount")
     8     private int ArticleCount;
     9 
    10     @XStreamAlias("Articles")
    11     private List<ArticlesItem> Articles;
    12 
    13     public int getArticleCount() {
    14         return ArticleCount;
    15     }
    16 
    17     public void setArticleCount(int articleCount) {
    18         ArticleCount = articleCount;
    19     }
    20 
    21     public List<ArticlesItem> getArticles() {
    22         return Articles;
    23     }
    24 
    25     public void setArticles(List<ArticlesItem> articles) {
    26         Articles = articles;
    27     }
    28 }

    图文消息中的Articles类:

    
    
    1 import com.thoughtworks.xstream.annotations.XStreamAlias;
    2 
    3 import java.util.List;
    4 @XStreamAlias("Articles")
    5 public class Articles {
    6     private List<ArticlesItem> Articles;
    7 }

    图文消息中的ArticlesItem类:

     1 import com.thoughtworks.xstream.annotations.XStreamAlias;
     2 
     3 import java.io.Serializable;
     4 
     5 @XStreamAlias("item")
     6 public class ArticlesItem implements Serializable {
     7     @XStreamAlias("Title")
     8     @XStreamCDATA
     9     private String Title;
    10 
    11     @XStreamAlias("Description")
    12     @XStreamCDATA
    13     private String Description;
    14 
    15     @XStreamAlias("PicUrl")
    16     @XStreamCDATA
    17     private String PicUrl;
    18 
    19     @XStreamAlias("Url")
    20     @XStreamCDATA
    21     private String Url;
    22 
    23     public String getTitle() {
    24         return Title;
    25     }
    26 
    27     public void setTitle(String title) {
    28         Title = title;
    29     }
    30 
    31     public String getDescription() {
    32         return Description;
    33     }
    34 
    35     public void setDescription(String description) {
    36         Description = description;
    37     }
    38 
    39     public String getPicUrl() {
    40         return PicUrl;
    41     }
    42 
    43     public void setPicUrl(String picUrl) {
    44         PicUrl = picUrl;
    45     }
    46 
    47     public String getUrl() {
    48         return Url;
    49     }
    50 
    51     public void setUrl(String url) {
    52         Url = url;
    53     }
    54 }

    service层实现方法:

    封装方法

     1 /**
     2      * 获取博客图文消息
     3      *
     4      * @param custermName
     5      * @param serverName
     6      * @param createTime
     7      * @return
     8      */
     9     private ArticlesMessage getBlogMessage(String custermName, String serverName, Long createTime) {
    10         ArticlesMessage outputMsg = new ArticlesMessage();
    11         outputMsg.setFromUserName(serverName);
    12         outputMsg.setToUserName(custermName);
    13         outputMsg.setCreateTime(createTime);
    14         outputMsg.setMsgType(MsgType.NEWS.getValue());
    15 
    16         List<ArticlesItem> articles = new ArrayList<>();
    17 
    18         ArticlesItem item1 = new ArticlesItem();
    19         item1.setTitle("晚天吹凉风");
    20         item1.setDescription("点击进入晚天吹凉风博客");
    21         item1.setPicUrl(WechatConstant.BASE_SERVER + "resources/images/wechat/a.png");
    22         item1.setUrl("https://my.oschina.net/inchlifc/blog");
    23         articles.add(item1);
    24 
    25         outputMsg.setArticles(articles);
    26         outputMsg.setArticleCount(articles.size());
    27 
    28         return outputMsg;
    29     }

    判断如果输入数字1,返回图文消息推送

     1 // 处理接收消息
     2         ServletInputStream in = request.getInputStream();
     3         // 将POST流转换为XStream对象
     4         XStream xs = new XStream();
     5         xs = SerializeXmlUtil.createXstream();
     6         XStream.setupDefaultSecurity(xs);
     7         xs.allowTypes(new Class[]{TextMessage.class, InputMessage.class, ArticlesMessage.class});
     8         xs.processAnnotations(InputMessage.class);
     9         xs.processAnnotations(ArticlesMessage.class);
    10         xs.processAnnotations(ImageMessage.class);
    11         // 将指定节点下的xml节点数据映射为对象
    12         xs.alias("xml", InputMessage.class);
    13         // 将流转换为字符串
    14         StringBuilder xmlMsg = new StringBuilder();
    15         byte[] b = new byte[4096];
    16         for (int n; (n = in.read(b)) != -1; ) {
    17             xmlMsg.append(new String(b, 0, n, "UTF-8"));
    18         }
    19         logger.info("收到消息====" + xmlMsg.toString());
    20         // 将xml内容转换为InputMessage对象
    21         InputMessage inputMsg = (InputMessage) xs.fromXML(xmlMsg.toString());
    22 
    23         // 服务端
    24         String servername = inputMsg.getToUserName();
    25         // 客户端
    26         String custermname = inputMsg.getFromUserName();
    27         // 接收时间
    28         long createTime = inputMsg.getCreateTime();
    29         // 返回时间
    30         Long returnTime = Calendar.getInstance().getTimeInMillis() / 1000;
    31         //接手文本内容
    32         String content = inputMsg.getContent();
    33         // 取得消息类型
    34         String msgType = inputMsg.getMsgType();
    35 
    36 if (MsgType.TEXT.getValue().equals(msgType)) {
    37                 //输入1 推送博客信息
    38                 if ("1".equals(content)) {
    39                     logger.info("收到文本1");
    40                     ArticlesMessage outputMsg = getBlogMessage(custermname, servername, returnTime);
    41                     logger.info("返回博客图文消息===" + xs.toXML(outputMsg));
    42                     response.getWriter().write(xs.toXML(outputMsg));
    43                 }
    44 }

    运行结果:

  • 相关阅读:
    触摸事件传递与响应者链条
    运动事件Motion Events
    手势识别
    MVC模式
    单例模式
    观察者模式(一对多)
    关于多线程的介绍
    Sandbox简介和路径获取
    NSFileManager和NSFileHandle使用
    归档储存
  • 原文地址:https://www.cnblogs.com/PreachChen/p/8655394.html
Copyright © 2011-2022 走看看