• Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装


    在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装。

    (一)封装请求信息

    首先打开微信提供的开发者文档:http://mp.weixin.qq.com/wiki/home/ ,点击左侧的“消息管理”----“接收普通消息”,在右侧我们可以看到微信普通消息类型大致有:文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息、链接消息;通过查看开发者文档,我们可以发现消息类型的格式为xml,以文本消息为例:

    <xml>  
    <ToUserName>< ![CDATA[toUser] ]></ToUserName>  
    <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
    <CreateTime>1348831860</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[this is a test] ]></Content>
    <MsgId>1234567890123456</MsgId> </xml>

     当我们接收消息的时候,微信将向我们发送Post请求,并以XML的格式发送与接收数据。那么此时我们就需要一个工具类来处理XML格式的文件:MessageType.parseXml()

      1 package com.webchat.util.weixin;
      2 
      3 import java.io.InputStream;
      4 import java.io.Writer;
      5 import java.util.HashMap;
      6 import java.util.List;
      7 import java.util.Map;
      8 
      9 import javax.servlet.http.HttpServletRequest;
     10 import javax.servlet.http.HttpServletResponse;
     11 
     12 import org.dom4j.Document;
     13 import org.dom4j.Element;
     14 import org.dom4j.io.SAXReader;
     15 
     16 import com.thoughtworks.xstream.XStream;
     17 import com.thoughtworks.xstream.core.util.QuickWriter;
     18 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
     19 import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
     20 import com.thoughtworks.xstream.io.xml.XppDriver;
     21 import com.webchat.entity.PageData;
     22  
     23 public class MessageType {
     24     /*
     25      * 文本消息
     26      */
     27     public static final String TEXT_MESSAGE = "text";
     28     /*
     29      * 图片消息
     30      */
     31     public static final String IMAGE_MESSAGE = "image";
     32     /*
     33      * 语音消息
     34      */
     35     public static final String VOICE_MESSAGE = "voice";
     36     /*
     37      * 视频消息
     38      */
     39     public static final String VIDEO_MESSAGE = "video";
     40     /*
     41      * 小视频消息消息
     42      */
     43     public static final String SHORTVIDEO_MESSAGE = "shortvideo";
     44     /*
     45      * 地理位置消息
     46      */
     47     public static final String POSOTION_MESSAGE = "location";
     48     /*
     49      * 链接消息
     50      */
     51     public static final String LINK_MESSAGE = "link";
     52     /*
     53      * 音乐消息
     54      */
     55     public static final String MUSIC_MESSAGE = "music";
     56     /*
     57      * 图文消息
     58      */
     59     public static final String IMAGE_TEXT_MESSAGE = "news";
     60     /*
     61      * 请求消息类型:事件推送
     62      */
     63     public static final String REQ_MESSAGE_TYPE_EVENT = "event";
     64     /*
     65      * 事件类型:subscribe(订阅)
     66      */
     67     public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
     68     /*
     69      * 事件类型:unsubscribe(取消订阅)
     70      */
     71     public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
     72     /*
     73      * 事件类型:scan(用户已关注时的扫描带参数二维码)
     74      */
     75     public static final String EVENT_TYPE_SCAN = "scan";
     76     /*
     77      * 事件类型:LOCATION(上报地理位置)
     78      */
     79     public static final String EVENT_TYPE_LOCATION = "location";
     80     /*
     81      * 事件类型:CLICK(自定义菜单)
     82      */
     83     public static final String EVENT_TYPE_CLICK = "click";
     84 
     85     /*
     86      * 响应消息类型:文本
     87      */
     88     public static final String RESP_MESSAGE_TYPE_TEXT = "text";
     89     /*
     90      * 响应消息类型:图片
     91      */
     92     public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
     93     /*
     94      * 响应消息类型:语音
     95      */
     96     public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
     97     /*
     98      * 响应消息类型:视频
     99      */
    100     public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
    101     /*
    102      * 响应消息类型:音乐
    103      */
    104     public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
    105     /*
    106      * 响应消息类型:图文
    107      */
    108     public static final String RESP_MESSAGE_TYPE_NEWS = "news";
    109 
    110     /**
    111      * @Title parseXml
    112      * @Description 将用户的xml消息提取成map key value 类型
    113      * @param request
    114      * @param response
    115      * @return
    116      * @throws Exception
    117      */
    118     public static Map<String, String> parseXml(HttpServletRequest request, HttpServletResponse response)
    119             throws Exception {
    120         // 将解析结果存储在HashMap中
    121         Map<String, String> map = new HashMap<String, String>();
    122         // 从request中取得输入流
    123         InputStream inputStream = request.getInputStream();
    124         // 读取输入流
    125         SAXReader reader = new SAXReader();
    126         Document document = reader.read(inputStream);
    127         // 得到xml根元素
    128         Element root = document.getRootElement();
    129         // 得到根元素的所有子节点
    130         List<Element> elementList = root.elements();
    131         // 遍历所有子节点
    132         for (Element e : elementList) {
    133             map.put(e.getName(), e.getText());
    134         }
    135         // 释放资源
    136         inputStream.close();
    137         inputStream = null;
    138         return map;
    139     }
    140 }
    View Code

    通过对开发文档的分析我们可以发现这些消息类型中,都会传回来这些公共的字段如:

        ToUserName(开发者微信号);

        FromUserName(发送方帐 号,OPEN_ID);

        CreateTime(消息的创建时间);

        MsgType(消息类型);

        MsgId(消息ID)。

    我们把这些封装成一个基类,然后 不同的部分,分别封装为各自的类然后继承这个基类,提高代码的重用性。

    (一)消息实体基础类 -- BaseMessage

     1 package com.webchat.entity.message;
     2 
     3 /**
     4  * 请求消息的公共字段类
     5  * 
     6  * @author Administrator
     7  *
     8  */
     9 public abstract class BaseMessage {
    10     // 开发者微信号
    11     private String ToUserName;
    12     // 发送方帐号(一个OpenID)
    13     private String FromUserName;
    14     // 消息创建时间 (整型)
    15     private long CreateTime;
    16     // 消息id,64位整型
    17     private long MsgId;
    18     /**
    19      * 获取 消息类型
    20      *
    21      * @return 消息类型
    22      */
    23     public abstract String getMsgType();
    24 
    25     public String getToUserName() {
    26         return ToUserName;
    27     }
    28 
    29     public void setToUserName(String toUserName) {
    30         ToUserName = toUserName;
    31     }
    32 
    33     public String getFromUserName() {
    34         return FromUserName;
    35     }
    36 
    37     public void setFromUserName(String fromUserName) {
    38         FromUserName = fromUserName;
    39     }
    40 
    41     public long getCreateTime() {
    42         return CreateTime;
    43     }
    44 
    45     public void setCreateTime(long createTime) {
    46         CreateTime = createTime;
    47     }
    48     
    49     public long getMsgId() {
    50         return MsgId;
    51     }
    52 
    53     public void setMsgId(long msgId) {
    54         MsgId = msgId;
    55     }
    56 }
    View Code

    (二)普通消息类

       1,文本消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 
     5 /**
     6  * 文本消息
     7  * @author Administrator
     8  *
     9  */
    10 public class TextMessage extends BaseMessage {
    11     //文本消息内容
    12     private String Content;
    13 
    14     public String getContent() {
    15         return Content;
    16     }
    17 
    18     public void setContent(String content) {
    19         Content = content;
    20     }
    21 
    22     @Override
    23     public String getMsgType() {
    24         return MessageType.TEXT_MESSAGE.toString();
    25     }
    26 
    27 }
    View Code

       2,图片消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 /**
     5  * 图片消息
     6  * @author Administrator
     7  *
     8  */
     9 public class ImageMessage extends BaseMessage{
    10     // 图片链接
    11     private String PicUrl;
    12     //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
    13     private String MediaId;
    14 
    15     public String getPicUrl() {
    16         return PicUrl;
    17     }
    18 
    19     public void setPicUrl(String picUrl) {
    20         PicUrl = picUrl;
    21     }
    22 
    23     public String getMediaId() {
    24         return MediaId;
    25     }
    26 
    27     public void setMediaId(String mediaId) {
    28         MediaId = mediaId;
    29     }
    30 
    31     @Override
    32     public String getMsgType() {
    33         return MessageType.IMAGE_MESSAGE.toString();
    34     }
    35 
    36 }
    View Code

       3,语音消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 
     5 /**
     6  * 语音消息
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 public class VoiceMessage extends BaseMessage {
    12     // 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
    13     private String MediaId;
    14     // 语音格式,如amr,speex等
    15     private String Format;
    16     // 语音识别结果,使用UTF8编码
    17     private String Recognition;
    18 
    19     public String getMediaId() {
    20         return MediaId;
    21     }
    22 
    23     public void setMediaId(String mediaId) {
    24         MediaId = mediaId;
    25     }
    26 
    27     public String getFormat() {
    28         return Format;
    29     }
    30 
    31     public void setFormat(String format) {
    32         Format = format;
    33     }
    34 
    35     public String getRecognition() {
    36         return Recognition;
    37     }
    38 
    39     public void setRecognition(String recognition) {
    40         Recognition = recognition;
    41     }
    42 
    43     @Override
    44     public String getMsgType() {
    45         return MessageType.VOICE_MESSAGE.toString();
    46     }
    47 
    48 }
    View Code

       4,视频消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 /**
     5  * 视频消息
     6  * @author Administrator
     7  *
     8  */
     9 public class VideoMessage extends BaseMessage {
    10     // 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
    11     private String MediaId;
    12     // 视频消息 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
    13     private String ThumbMediaId;
    14 
    15     public String getMediaId() {
    16         return MediaId;
    17     }
    18 
    19     public void setMediaId(String mediaId) {
    20         MediaId = mediaId;
    21     }
    22 
    23     public String getThumbMediaId() {
    24         return ThumbMediaId;
    25     }
    26 
    27     public void setThumbMediaId(String thumbMediaId) {
    28         ThumbMediaId = thumbMediaId;
    29     }
    30 
    31     @Override
    32     public String getMsgType() {
    33         return MessageType.VIDEO_MESSAGE.toString();
    34     }
    35 
    36 }
    View Code

       5,小视频消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 /**
     5  * 小视频消息
     6  * @author Administrator
     7  *
     8  */
     9 public class ShortVideoInputMessage extends BaseMessage {
    10     // 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
    11     private String MediaId;
    12     // 视频消息 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
    13     private String ThumbMediaId;
    14 
    15     public String getMediaId() {
    16         return MediaId;
    17     }
    18 
    19     public void setMediaId(String mediaId) {
    20         MediaId = mediaId;
    21     }
    22 
    23     public String getThumbMediaId() {
    24         return ThumbMediaId;
    25     }
    26 
    27     public void setThumbMediaId(String thumbMediaId) {
    28         ThumbMediaId = thumbMediaId;
    29     }
    30 
    31     @Override
    32     public String getMsgType() {
    33         return MessageType.SHORTVIDEO_MESSAGE.toString();
    34     }
    35 }
    View Code

       6,地理位置消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 
     5 /**
     6  * 地理位置消息
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 public class LocationMessage extends BaseMessage {
    12     // 地理位置维度
    13     private String Location_X;
    14     // 地理位置经度
    15     private String Location_Y;
    16     // 地图缩放大小
    17     private Long Scale;
    18     // 地理位置信息
    19     private String Label;
    20 
    21     public String getLocation_X() {
    22         return Location_X;
    23     }
    24 
    25     public void setLocation_X(String location_X) {
    26         Location_X = location_X;
    27     }
    28 
    29     public String getLocation_Y() {
    30         return Location_Y;
    31     }
    32 
    33     public void setLocation_Y(String location_Y) {
    34         Location_Y = location_Y;
    35     }
    36 
    37     public Long getScale() {
    38         return Scale;
    39     }
    40 
    41     public void setScale(Long scale) {
    42         Scale = scale;
    43     }
    44 
    45     public String getLabel() {
    46         return Label;
    47     }
    48 
    49     public void setLabel(String label) {
    50         Label = label;
    51     }
    52 
    53     @Override
    54     public String getMsgType() {
    55         return MessageType.POSOTION_MESSAGE.toString();
    56     }
    57 
    58 }
    View Code

       7,链接消息

     1 package com.webchat.entity.message;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 
     5 /**
     6  * 链接消息
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 public class LinkMessage extends BaseMessage {
    12     // 消息标题
    13     private String Title;
    14     // 消息描述
    15     private String Description;
    16     // 消息链接
    17     private String Url;
    18 
    19     public String getTitle() {
    20         return Title;
    21     }
    22 
    23     public void setTitle(String title) {
    24         Title = title;
    25     }
    26 
    27     public String getDescription() {
    28         return Description;
    29     }
    30 
    31     public void setDescription(String description) {
    32         Description = description;
    33     }
    34 
    35     public String getUrl() {
    36         return Url;
    37     }
    38 
    39     public void setUrl(String url) {
    40         Url = url;
    41     }
    42 
    43     @Override
    44     public String getMsgType() {
    45         return MessageType.LINK_MESSAGE.toString();
    46     }
    47 
    48 }
    View Code

    (二)封装事件

    点击左侧的“消息管理”----“接收事件推送”,在右侧我们可以看到微信接收事件推送的目录:关注/取消关注事件、扫描带参数二维码事件、上报地理位置事件、自定义菜单事件、点击菜单拉取消息时的事件推送、点击菜单跳转链接时的事件推送;推送XML数据包 和消息文本的类似,详情参考开发者文档

    提取公共字段创建基础类

     1 package com.webchat.entity.event;
     2 
     3 /**
     4  * 事件消息
     5  * 
     6  * @author Administrator
     7  *
     8  */
     9 public abstract class BaseEvent {
    10     // 开发者微信号
    11     private String ToUserName;
    12     // 发送方帐号(一个OpenID)
    13     private String FromUserName;
    14     // 消息创建时间 (整型)
    15     private long CreateTime;
    16     // 消息类型
    17     private String MsgType;
    18     // 事件类型
    19     private String Event;
    20 
    21     public String getEvent() {
    22         return Event;
    23     }
    24 
    25     public void setEvent(String event) {
    26         Event = event;
    27     }
    28 
    29     public String getToUserName() {
    30         return ToUserName;
    31     }
    32 
    33     public void setToUserName(String toUserName) {
    34         ToUserName = toUserName;
    35     }
    36 
    37     public String getFromUserName() {
    38         return FromUserName;
    39     }
    40 
    41     public void setFromUserName(String fromUserName) {
    42         FromUserName = fromUserName;
    43     }
    44 
    45     public long getCreateTime() {
    46         return CreateTime;
    47     }
    48 
    49     public void setCreateTime(long createTime) {
    50         CreateTime = createTime;
    51     }
    52 
    53     public String getMsgType() {
    54         return MsgType;
    55     }
    56 
    57     public void setMsgType(String msgType) {
    58         MsgType = msgType;
    59     }
    60 }
    View Code

    事件封装

       1,关注/取消事件

    1 package com.webchat.entity.event;
    2 /**
    3  * 关注取消事件
    4  * @author Administrator
    5  *
    6  */
    7 public class SubscribeEvent extends BaseEvent{
    8 
    9 }
    View Code

       2,扫描参数带二维码事件

     1 package com.webchat.entity.event;
     2 
     3 /**
     4  * 扫描带参数二维码事件
     5  * 
     6  * @author Administrator
     7  *
     8  */
     9 public class QRCodeEvent extends BaseEvent {
    10     // 事件KEY值
    11     private String EventKey;
    12     // 用于换取二维码图片
    13     private String Ticket;
    14 
    15     public String getEventKey() {
    16         return EventKey;
    17     }
    18 
    19     public void setEventKey(String eventKey) {
    20         EventKey = eventKey;
    21     }
    22 
    23     public String getTicket() {
    24         return Ticket;
    25     }
    26 
    27     public void setTicket(String ticket) {
    28         Ticket = ticket;
    29     }
    30 
    31 }
    View Code

       3,上报地理位置事件

     1 package com.webchat.entity.event;
     2 
     3 /**
     4  * 上报地理位置事件
     5  * 
     6  * @author Administrator
     7  *
     8  */
     9 public class LocationEvent extends BaseEvent {
    10     // 地理位置纬度
    11     private String Latitude;
    12     // 地理位置经度
    13     private String Longitude;
    14     // 地理位置精度
    15     private String Precision;
    16 
    17     public String getLatitude() {
    18         return Latitude;
    19     }
    20 
    21     public void setLatitude(String latitude) {
    22         Latitude = latitude;
    23     }
    24 
    25     public String getLongitude() {
    26         return Longitude;
    27     }
    28 
    29     public void setLongitude(String longitude) {
    30         Longitude = longitude;
    31     }
    32 
    33     public String getPrecision() {
    34         return Precision;
    35     }
    36 
    37     public void setPrecision(String precision) {
    38         Precision = precision;
    39     }
    40 
    41 }
    View Code

       4,自定义菜单事件

     1 package com.webchat.entity.event;
     2 
     3 /**
     4  * 自定义菜单事件
     5  * @author Administrator
     6  *
     7  */
     8 public class MenuEvent extends BaseEvent {
     9     // 事件KEY值,与自定义菜单接口中KEY值对应
    10     private String EventKey;
    11     
    12     public String getEventKey() {
    13         return EventKey;
    14     }
    15 
    16     public void setEventKey(String eventKey) {
    17         EventKey = eventKey;
    18     }
    19 
    20 }
    View Code

    (三)回复消息的分类及实体的封装

    点击左侧的“消息管理”----“被动回复用户消息”,当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。

    微信服务器在将用户的消息发给公众号的开发者服务器地址(开发者中心处配置)后,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。详情请查看开发者文档

    同样,把消息回复中定义的所有消息都有的字段提取出来,封装成一个公共类,

    响应消息的基类BaseOutMessage

     1 package com.webchat.entity.output;
     2 
     3 /**
     4  * 回复消息的公共字段类
     5  * 
     6  * @author Administrator
     7  *
     8  */
     9 public abstract class BaseOutMessage {
    10     // 接收方帐号(收到的OpenID)
    11     private String ToUserName;
    12     // 开发者微信号
    13     private String FromUserName;
    14     // 消息创建时间 (整型)
    15     private long CreateTime;
    16 
    17     // 获取消息类型
    18     public abstract String getMsgType();
    19     
    20     public String getToUserName() {
    21         return ToUserName;
    22     }
    23 
    24     public void setToUserName(String toUserName) {
    25         ToUserName = toUserName;
    26     }
    27 
    28     public String getFromUserName() {
    29         return FromUserName;
    30     }
    31 
    32     public void setFromUserName(String fromUserName) {
    33         FromUserName = fromUserName;
    34     }
    35 
    36     public long getCreateTime() {
    37         return CreateTime;
    38     }
    39 
    40     public void setCreateTime(long createTime) {
    41         CreateTime = createTime;
    42     }
    43 
    44 }
    View Code

    普通消息回复实体实现

       1,回复文本消息

     1 package com.webchat.entity.output;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 
     5 /**
     6  * 文本回复消息
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 public class TextMessage extends BaseOutMessage {
    12     // 文本消息
    13     private String Content;
    14 
    15     public String getContent() {
    16         return Content;
    17     }
    18 
    19     public void setContent(String content) {
    20         Content = content;
    21     }
    22 
    23     @Override
    24     public String getMsgType() {
    25         return MessageType.RESP_MESSAGE_TYPE_TEXT.toString();
    26     }
    27 }
    View Code

       2,回复图片消息

     1 package com.webchat.entity.output;
     2 
     3 
     4 /**
     5  * 图片回复消息
     6  * @author Administrator
     7  *
     8  */
     9 public class Image{
    10     //通过上传多媒体文件,得到的id
    11     private String MediaId;
    12     
    13     public String getMediaId() {
    14         return MediaId;
    15     }
    16 
    17     public void setMediaId(String mediaId) {
    18         MediaId = mediaId;
    19     }
    20 }
    View Code
     1 package com.webchat.entity.output;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 /**
     5  * 图片输出内容
     6  * @author Administrator
     7  *
     8  */
     9 public class ImageOutputMessage extends BaseOutMessage{
    10     private Image Image;
    11     public Image getImage() {
    12         return Image;
    13     }
    14     public void setImage(Image image) {
    15         Image = image;
    16     }
    17     @Override
    18     public String getMsgType() {
    19         return MessageType.RESP_MESSAGE_TYPE_IMAGE.toString();
    20     }
    21 }
    View Code

       3,回复语音消息

     1 package com.webchat.entity.output;
     2 /**
     3  * 语音model
     4  * @author Administrator
     5  *
     6  */
     7 public class Voice {
     8     // 媒体文件id
     9     private String MediaId;
    10 
    11     public String getMediaId() {
    12         return MediaId;
    13     }
    14 
    15     public void setMediaId(String mediaId) {
    16         MediaId = mediaId;
    17     }
    18     
    19 }
    View Code
     1 package com.webchat.entity.output;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 /**
     5  * 语音回复消息
     6  * @author Administrator
     7  *
     8  */
     9 public class VoiceOutputMessage extends BaseOutMessage{
    10     private Voice voice;
    11     
    12     public Voice getVoice() {
    13         return voice;
    14     }
    15 
    16     public void setVoice(Voice voice) {
    17         this.voice = voice;
    18     }
    19 
    20     @Override
    21     public String getMsgType() {
    22         return MessageType.RESP_MESSAGE_TYPE_VOICE.toString();
    23     }
    24 }
    View Code

       4,回复视频消息

     1 package com.webchat.entity.output;
     2 /**
     3  * 视频model
     4  * @author Administrator
     5  *
     6  */
     7 public class Video {
     8     // 媒体文件id
     9     private String MediaId;
    10     // 缩略图的媒体id
    11     private String ThumbMediaId;
    12     //视频消息的标题
    13     private String Title; 
    14     //视频消息的描述
    15     private String Description;
    16     public String getMediaId() {
    17         return MediaId;
    18     }
    19 
    20     public void setMediaId(String mediaId) {
    21         MediaId = mediaId;
    22     }
    23 
    24     public String getThumbMediaId() {
    25         return ThumbMediaId;
    26     }
    27 
    28     public void setThumbMediaId(String thumbMediaId) {
    29         ThumbMediaId = thumbMediaId;
    30     }
    31 
    32     public String getTitle() {
    33         return Title;
    34     }
    35 
    36     public void setTitle(String title) {
    37         Title = title;
    38     }
    39 
    40     public String getDescription() {
    41         return Description;
    42     }
    43 
    44     public void setDescription(String description) {
    45         Description = description;
    46     }
    47     
    48 }
    View Code
     1 package com.webchat.entity.output;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 
     5 /**
     6  * 回复视频消息
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 public class VideoOutPutMessage extends BaseOutMessage {
    12     private Video Video;
    13 
    14     public Video getVideo() {
    15         return Video;
    16     }
    17 
    18     public void setVideo(Video video) {
    19         Video = video;
    20     }
    21 
    22     @Override
    23     public String getMsgType() {
    24         return MessageType.RESP_MESSAGE_TYPE_VIDEO.toString();
    25     }
    26 }
    View Code

       5,回复音乐消息

     1 package com.webchat.entity.output;
     2 /**
     3  * 回复音乐消息中的音乐对象
     4  * @author Administrator
     5  *
     6  */
     7 public class Music {
     8     // 音乐标题
     9     private String Title;
    10     // 音乐描述
    11     private String Description;
    12     // 音乐链接
    13     private String MusicUrl;
    14     // 高质量音乐链接,WIFI环境优先使用该链接播放音乐
    15     private String HQMusicUrl;
    16     // 缩略图的媒体id,通过上传多媒体文件得到的id
    17     private String ThumbMediaId;
    18 
    19     public String getTitle() {
    20         return Title;
    21     }
    22 
    23     public void setTitle(String title) {
    24         Title = title;
    25     }
    26 
    27     public String getDescription() {
    28         return Description;
    29     }
    30 
    31     public void setDescription(String description) {
    32         Description = description;
    33     }
    34 
    35     public String getMusicUrl() {
    36         return MusicUrl;
    37     }
    38 
    39     public void setMusicUrl(String musicUrl) {
    40         MusicUrl = musicUrl;
    41     }
    42 
    43     public String getHQMusicUrl() {
    44         return HQMusicUrl;
    45     }
    46 
    47     public void setHQMusicUrl(String hQMusicUrl) {
    48         HQMusicUrl = hQMusicUrl;
    49     }
    50 
    51     public String getThumbMediaId() {
    52         return ThumbMediaId;
    53     }
    54 
    55     public void setThumbMediaId(String thumbMediaId) {
    56         ThumbMediaId = thumbMediaId;
    57     }
    58 
    59 }
    View Code
     1 package com.webchat.entity.output;
     2 
     3 import com.webchat.util.weixin.MessageType;
     4 /**
     5  * 回复音乐消息
     6  * @author Administrator
     7  *
     8  */
     9 public class MusicOutputMessage extends BaseOutMessage {
    10     private Music Music;
    11 
    12     public Music getMusic() {
    13         return Music;
    14     }
    15 
    16     public void setMusic(Music music) {
    17         Music = music;
    18     }
    19 
    20     @Override
    21     public String getMsgType() {
    22         return MessageType.RESP_MESSAGE_TYPE_MUSIC.toString();
    23     }
    24 }
    View Code

       6,回复图文消息

     1 package com.webchat.entity.output;
     2 /**
     3  * 图文消息实体类对象
     4  * @author Administrator
     5  *
     6  */
     7 public class Articles {
     8     private String Title;
     9     // 图文消息描述
    10     private String Description;
    11     // 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
    12     private String PicUrl;
    13     // 点击图文消息跳转链接
    14     private String Url;
    15 
    16     public String getTitle() {
    17         return Title;
    18     }
    19 
    20     public void setTitle(String title) {
    21         Title = title;
    22     }
    23 
    24     public String getDescription() {
    25         return Description;
    26     }
    27 
    28     public void setDescription(String description) {
    29         Description = description;
    30     }
    31 
    32     public String getPicUrl() {
    33         return PicUrl;
    34     }
    35 
    36     public void setPicUrl(String picUrl) {
    37         PicUrl = picUrl;
    38     }
    39 
    40     public String getUrl() {
    41         return Url;
    42     }
    43 
    44     public void setUrl(String url) {
    45         Url = url;
    46     }
    47 }
    View Code
     1 package com.webchat.entity.output;
     2 
     3 import java.util.List;
     4 import com.webchat.util.weixin.MessageType;
     5 
     6 /**
     7  * 提供了获取多条图文消息信息
     8  * 
     9  * @author Administrator
    10  *
    11  */
    12 public class NewsOutputMessage extends BaseOutMessage {
    13     // 图文消息个数,限制为10条以内
    14     private int ArticleCount;
    15     // 多条图文消息信息,默认第一个item为大图
    16     private List<Articles> Articles;
    17 
    18     public int getArticleCount() {
    19         return ArticleCount;
    20     }
    21 
    22     public void setArticleCount(int articleCount) {
    23         ArticleCount = articleCount;
    24     }
    25 
    26     public List<Articles> getArticles() {
    27         return Articles;
    28     }
    29 
    30     public void setArticles(List<Articles> articles) {
    31         Articles = articles;
    32     }
    33 
    34     @Override
    35     public String getMsgType() {
    36         return MessageType.RESP_MESSAGE_TYPE_NEWS.toString();
    37     }
    38 }
    View Code

    至此,我们所有的内容已经封装完成

    接下来会更新:微信服务器 post 消息体的接收及消息处理的内容

    如果在操作过程中有问题,欢迎随时讨论^.^

    百度云链接:https://pan.baidu.com/s/1xQIAl14_9JKJi1BsFe7yvw    密码:ybnv

    备注:我的是maven项目,此链接只为分享封装的实体类,如果项目中出现错误,可不用理会,只拿自己想要的东西即可

    其他文章关联

    (一)Java开发微信公众号(一)---初识微信公众号以及环境搭建

    (二)Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    (三)Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装

    (四)Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

     

  • 相关阅读:
    虚拟化与KVM部署
    Jenkins部署及使用
    Tomcat及LAMT架构搭建
    版本控制与Gitlab配置
    Cobbler介绍及搭载
    MYSQL集群配置
    HAProxy——配置与实例
    LVS——配置实例
    Linux——集群
    关于IntellIJ IDEA 2016.2.4新建项目的Java Enterprise没有显示问题
  • 原文地址:https://www.cnblogs.com/han108/p/9603983.html
Copyright © 2020-2023  润新知