• Java微信二次开发(三)


    各种类型消息的封装

    第一步:找到com.wtz.message.response包,新建类Image.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午8:38:37
     6  *  <p>version:1.0</p>
     7  *     <p>description:图片的实体类</p>
     8  */
     9 public class Image {
    10     //图片媒体ID
    11     private String MediaId;
    12     
    13     public String getMediaId() {
    14         return MediaId;
    15     }
    16     public void setMediaId(String mediaId) {
    17         MediaId = mediaId;
    18     }
    19 }

    第二步:找到com.wtz.message.response包,新建类ImageMessage.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午8:49:57
     6  *  <p>version:1.0</p>
     7  *     <p>description:图片消息类</p>
     8  */
     9 public class ImageMessage extends BaseMessage {
    10     //图片对象
    11     private Image image;
    12 
    13     public Image getImage() {
    14         return image;
    15     }
    16 
    17     public void setImage(Image image) {
    18         this.image = image;
    19     }
    20 }

    第三步:找到com.wtz.message.response包,新建类Video.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午9:02:14
     6  *  <p>version:1.0</p>
     7  *     <p>description:视频的实体类</p>
     8  */
     9 public class Video {
    10     //视频消息的媒体ID
    11     private String MediaId;
    12     //视频消息的标题
    13     private String Title;
    14     //视频消息的描述
    15     private String Description;
    16     
    17     public String getMediaId() {
    18         return MediaId;
    19     }
    20     public void setMediaId(String mediaId) {
    21         MediaId = mediaId;
    22     }
    23     public String getTitle() {
    24         return Title;
    25     }
    26     public void setTitle(String title) {
    27         Title = title;
    28     }
    29     public String getDescription() {
    30         return Description;
    31     }
    32     public void setDescription(String description) {
    33         Description = description;
    34     }
    35 }

    第四步:找到com.wtz.message.response包,新建类VideoMessage.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午9:10:14
     6  *  <p>version:1.0</p>
     7  *     <p>description:视频消息类</p>
     8  */
     9 public class VideoMessage extends BaseMessage{
    10     //视频对象
    11     private Video video;
    12 
    13     public Video getVideo() {
    14         return video;
    15     }
    16 
    17     public void setVideo(Video video) {
    18         this.video = video;
    19     }
    20 }

    第五步:找到com.wtz.message.response包,新建类Voice.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午9:21:47
     6  *  <p>version:1.0</p>
     7  *     <p>description:语音消息实体类</p>
     8  */
     9 public class Voice {
    10     //语音媒体编号
    11     private String MediaId;
    12     
    13     public String getMediaId() {
    14         return MediaId;
    15     }
    16     public void setMediaId(String mediaId) {
    17         MediaId = mediaId;
    18     }
    19 }

    第六步:找到com.wtz.message.response包,新建类VoiceMessage.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午9:44:58
     6  *  <p>version:1.0</p>
     7  *     <p>description:语音消息类</p>
     8  */
     9 public class VoiceMessage extends BaseMessage{
    10     //语音对象
    11     private Voice voice;
    12 
    13     public Voice getVoice() {
    14         return voice;
    15     }
    16 
    17     public void setVoice(Voice voice) {
    18         this.voice = voice;
    19     }
    20 }

    第七步:找到com.wtz.message.response包,新建类Music.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午9:48:11
     6  *  <p>version:1.0</p>
     7  *     <p>description:音乐消息实体类</p>
     8  */
     9 public class Music {
    10     //音乐标题
    11     private String Title;
    12     //音乐描述
    13     private String Description;
    14     //音乐链接
    15     private String MusicUrl;
    16     //高品质音乐链接
    17     private String HQMusicUrl;
    18     //缩略图的媒体ID
    19     private String ThumbMediaId;
    20     
    21     public String getTitle() {
    22         return Title;
    23     }
    24     public void setTitle(String title) {
    25         Title = title;
    26     }
    27     public String getDescription() {
    28         return Description;
    29     }
    30     public void setDescription(String description) {
    31         Description = description;
    32     }
    33     public String getMusicUrl() {
    34         return MusicUrl;
    35     }
    36     public void setMusicUrl(String musicUrl) {
    37         MusicUrl = musicUrl;
    38     }
    39     public String getHQMusicUrl() {
    40         return HQMusicUrl;
    41     }
    42     public void setHQMusicUrl(String hQMusicUrl) {
    43         HQMusicUrl = hQMusicUrl;
    44     }
    45     public String getThumbMediaId() {
    46         return ThumbMediaId;
    47     }
    48     public void setThumbMediaId(String thumbMediaId) {
    49         ThumbMediaId = thumbMediaId;
    50     }
    51 }

    第八步:找到com.wtz.message.response包,新建类MusicMessage.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午9:58:21
     6  *  <p>version:1.0</p>
     7  *     <p>description:音乐消息类</p>
     8  */
     9 public class MusicMessage extends BaseMessage{
    10     //音乐对象
    11     private Music music;
    12 
    13     public Music getMusic() {
    14         return music;
    15     }
    16 
    17     public void setMusic(Music music) {
    18         this.music = music;
    19     }
    20 }

    第九步:找到com.wtz.message.response包,新建类Article.java

     1 package com.wtz.message.response;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午10:05:29
     6  *  <p>version:1.0</p>
     7  *     <p>description:图文实体类</p>
     8  */
     9 public class Article {
    10     //图文标题
    11     private String Title;
    12     //图文描述
    13     private String Description;
    14     //图片链接,支持JPG,PNG格式,较好的效果为大图
    15     private String PicUrl;
    16     //图文消息跳转链接
    17     private String Url;
    18     
    19     public String getTitle() {
    20         return Title;
    21     }
    22     public void setTitle(String title) {
    23         Title = title;
    24     }
    25     public String getDescription() {
    26         return Description;
    27     }
    28     public void setDescription(String description) {
    29         Description = description;
    30     }
    31     public String getPicUrl() {
    32         return PicUrl;
    33     }
    34     public void setPicUrl(String picUrl) {
    35         PicUrl = picUrl;
    36     }
    37     public String getUrl() {
    38         return Url;
    39     }
    40     public void setUrl(String url) {
    41         Url = url;
    42     }
    43 }

    第十步:找到com.wtz.message.response包,新建类NewsMessage.java

     1 package com.wtz.message.response;
     2 
     3 import java.util.List;
     4 
     5 /**
     6  *     @author wangtianze QQ:864620012
     7  *    @date 2017年4月20日 上午10:16:22
     8  *  <p>version:1.0</p>
     9  *     <p>description:图文消息类</p>
    10  */
    11 public class NewsMessage extends BaseMessage{
    12     //图文条数
    13     private int ArticleCount;
    14     //多条图文消息信息,默认第一个item为大图
    15     private List<Article> Articles;
    16     
    17     public int getArticleCount() {
    18         return ArticleCount;
    19     }
    20     public void setArticleCount(int articleCount) {
    21         ArticleCount = articleCount;
    22     }
    23     public List<Article> getArticles() {
    24         return Articles;
    25     }
    26     public void setArticles(List<Article> articles) {
    27         Articles = articles;
    28     }
    29 }

    第十一步:新建包com.wtz.message.request,新建类BaseMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午10:53:23
     6  *  <p>version:1.0</p>
     7  *     <p>description:请求消息基类(普通用户->公众账号)</p>
     8  *  <p>站在服务器端的视角:接收信息</p>
     9  */
    10 public class BaseMessage {
    11     //开发者微信号
    12     private String ToUserName;
    13     //发送方账号(一个OpenId)
    14     private String FromUserName;
    15     //消息创建时间(整型)
    16     private long CreateTime;
    17     //消息类型
    18     private String MsgType;
    19     //消息ID,64位整型
    20     private long MsgId;
    21     
    22     public String getToUserName() {
    23         return ToUserName;
    24     }
    25     public void setToUserName(String toUserName) {
    26         ToUserName = toUserName;
    27     }
    28     public String getFromUserName() {
    29         return FromUserName;
    30     }
    31     public void setFromUserName(String fromUserName) {
    32         FromUserName = fromUserName;
    33     }
    34     public long getCreateTime() {
    35         return CreateTime;
    36     }
    37     public void setCreateTime(long createTime) {
    38         CreateTime = createTime;
    39     }
    40     public String getMsgType() {
    41         return MsgType;
    42     }
    43     public void setMsgType(String msgType) {
    44         MsgType = msgType;
    45     }
    46     public long getMsgId() {
    47         return MsgId;
    48     }
    49     public void setMsgId(long msgId) {
    50         MsgId = msgId;
    51     }
    52 }

    第十二步:找到com.wtz.message.request包,新建类TextMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午11:04:35
     6  *  <p>version:1.0</p>
     7  *     <p>description:文本消息</p>
     8  */
     9 public class TextMessage extends BaseMessage{
    10     //消息内容
    11     private String Content;
    12 
    13     public String getContent() {
    14         return Content;
    15     }
    16 
    17     public void setContent(String content) {
    18         Content = content;
    19     }
    20 }

    第十三步:找到com.wtz.message.request包,新建类ImageMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午11:20:50
     6  *  <p>version:1.0</p>
     7  *     <p>description:图片消息</p>
     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     public void setPicUrl(String picUrl) {
    19         PicUrl = picUrl;
    20     }
    21     public String getMediaId() {
    22         return MediaId;
    23     }
    24     public void setMediaId(String mediaId) {
    25         MediaId = mediaId;
    26     }
    27 }

    第十四步:找到com.wtz.message.request包,新建类VoiceMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午11:27:40
     6  *  <p>version:1.0</p>
     7  *     <p>description:语音消息类</p>
     8  */
     9 public class VoiceMessage extends BaseMessage {
    10     //媒体ID
    11     private String MediaId;
    12     //语音格式
    13     private String Format;
    14 
    15     public String getMediaId() {
    16         return MediaId;
    17     }
    18     public void setMediaId(String mediaId) {
    19         MediaId = mediaId;
    20     }
    21     public String getFormat() {
    22         return Format;
    23     }
    24     public void setFormat(String format) {
    25         Format = format;
    26     }
    27 }

    第十五步:找到com.wtz.message.request包,新建类VideoMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午3:28:03
     6  *  <p>version:1.0</p>
     7  *     <p>description:视频消息类</p>
     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     public void setMediaId(String mediaId) {
    19         MediaId = mediaId;
    20     }
    21     public String getThumbMediaId() {
    22         return ThumbMediaId;
    23     }
    24     public void setThumbMediaId(String thumbMediaId) {
    25         ThumbMediaId = thumbMediaId;
    26     }
    27 }

    第十六步:找到com.wtz.message.request包,新建类LocatonMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午3:27:40
     6  *  <p>version:1.0</p>
     7  *     <p>description:地理位置消息类</p>
     8  */
     9 public class LocationMessage extends BaseMessage {
    10     //地理位置纬度
    11     private String Location_X;
    12     //地理位置经度
    13     private String Location_Y;
    14     //地图缩放大小
    15     private String Scale;
    16     //地理位置信息
    17     private String Label;
    18     
    19     public String getLocation_X() {
    20         return Location_X;
    21     }
    22     public void setLocation_X(String location_X) {
    23         Location_X = location_X;
    24     }
    25     public String getLocation_Y() {
    26         return Location_Y;
    27     }
    28     public void setLocation_Y(String location_Y) {
    29         Location_Y = location_Y;
    30     }
    31     public String getScale() {
    32         return Scale;
    33     }
    34     public void setScale(String scale) {
    35         Scale = scale;
    36     }
    37     public String getLabel() {
    38         return Label;
    39     }
    40     public void setLabel(String label) {
    41         Label = label;
    42     }
    43 }

    第十七步:找到com.wtz.message.request包,新建类LinkMessage.java

     1 package com.wtz.message.request;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午1:58:04
     6  *  <p>version:1.0</p>
     7  *     <p>description:链接消息类</p>
     8  */
     9 public class LinkMessage extends BaseMessage {
    10     //消息标题
    11     private String Title;
    12     //消息描述
    13     private String Description;
    14     //消息链接
    15     private String Url;
    16     
    17     public String getTitle() {
    18         return Title;
    19     }
    20     public void setTitle(String title) {
    21         Title = title;
    22     }
    23     public String getDescription() {
    24         return Description;
    25     }
    26     public void setDescription(String description) {
    27         Description = description;
    28     }
    29     public String getUrl() {
    30         return Url;
    31     }
    32     public void setUrl(String url) {
    33         Url = url;
    34     }
    35 }

    第十八步:新建包com.wtz.message.event,新建类BaseEventMessage.java

     1 package com.wtz.message.event;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 上午10:44:09
     6  *  <p>version:1.0</p>
     7  *     <p>description:基础事件消息类</p>
     8  */
     9 public class BaseEventMessage {
    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 getToUserName() {
    22         return ToUserName;
    23     }
    24     public void setToUserName(String toUserName) {
    25         ToUserName = toUserName;
    26     }
    27     public String getFromUserName() {
    28         return FromUserName;
    29     }
    30     public void setFromUserName(String fromUserName) {
    31         FromUserName = fromUserName;
    32     }
    33     public long getCreateTime() {
    34         return CreateTime;
    35     }
    36     public void setCreateTime(long createTime) {
    37         CreateTime = createTime;
    38     }
    39     public String getMsgType() {
    40         return MsgType;
    41     }
    42     public void setMsgType(String msgType) {
    43         MsgType = msgType;
    44     }
    45     public String getEvent() {
    46         return Event;
    47     }
    48     public void setEvent(String event) {
    49         Event = event;
    50     }
    51 }

    第十九步:找到包com.wtz.message.event,新建类QRCodeEventMessage.java

     1 package com.wtz.message.event;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午3:24:30
     6  *  <p>version:1.0</p>
     7  *     <p>description:扫描带参数二维码事件类</p>
     8  */
     9 public class QRCodeEventMessage extends BaseEventMessage{
    10     //事件Key值
    11     private String EventKey;
    12     //用于换取二维码图片
    13     private String Ticket;
    14     
    15     public String getEventKey() {
    16         return EventKey;
    17     }
    18     public void setEventKey(String eventKey) {
    19         EventKey = eventKey;
    20     }
    21     public String getTicket() {
    22         return Ticket;
    23     }
    24     public void setTicket(String ticket) {
    25         Ticket = ticket;
    26     } 
    27 }

    第二十步:找到包com.wtz.message.event,新建类SubscribeEventMessage.java

     1 package com.wtz.message.event;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午3:27:11
     6  *  <p>version:1.0</p>
     7  *     <p>description:关注/取消关注事件类</p>
     8  */
     9 public class SubscribeEventMessage extends BaseEventMessage{
    10     
    11 }

    第二十一步:找到包com.wtz.message.event,新建类MenuEventMessage.java

     1 package com.wtz.message.event;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午3:32:42
     6  *  <p>version:1.0</p>
     7  *     <p>description:自定义菜单事件类</p>
     8  */
     9 public class MenuEventMessage extends BaseEventMessage{
    10     //事件Key值,与自定义菜单接口中Key值对应
    11     private String EventKey;
    12 
    13     public String getEventKey() {
    14         return EventKey;
    15     }
    16 
    17     public void setEventKey(String eventKey) {
    18         EventKey = eventKey;
    19     }
    20 }

    第二十二步:找到包com.wtz.message.event,新建类LocationEventMessage.java

     1 package com.wtz.message.event;
     2 
     3 /**
     4  *     @author wangtianze QQ:864620012
     5  *    @date 2017年4月20日 下午3:37:50
     6  *  <p>version:1.0</p>
     7  *     <p>description:上报地理位置事件类</p>
     8  */
     9 public class LocationEventMessage extends BaseEventMessage{
    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     public void setLatitude(String latitude) {
    21         Latitude = latitude;
    22     }
    23     public String getLongitude() {
    24         return Longitude;
    25     }
    26     public void setLongitude(String longitude) {
    27         Longitude = longitude;
    28     }
    29     public String getPrecision() {
    30         return Precision;
    31     }
    32     public void setPrecision(String precision) {
    33         Precision = precision;
    34     }
    35 }

    第二十三步:找到包com.wtz.util下的MessageUtil.java类,修改这个类添加请求和回复的各种消息类型,事件类型,添加将各种类型消息转换成XML格式的方法

      1 package com.wtz.util;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.io.Writer;
      6 import java.util.HashMap;
      7 import java.util.List;
      8 import java.util.Map;
      9 
     10 import javax.servlet.http.HttpServletRequest;
     11 
     12 import org.dom4j.Document;
     13 import org.dom4j.DocumentException;
     14 import org.dom4j.Element;
     15 import org.dom4j.io.SAXReader;
     16 
     17 import com.thoughtworks.xstream.XStream;
     18 import com.thoughtworks.xstream.core.util.QuickWriter;
     19 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
     20 import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
     21 import com.thoughtworks.xstream.io.xml.XppDriver;
     22 import com.wtz.message.response.ImageMessage;
     23 import com.wtz.message.response.MusicMessage;
     24 import com.wtz.message.response.NewsMessage;
     25 import com.wtz.message.response.TextMessage;
     26 import com.wtz.message.response.VideoMessage;
     27 import com.wtz.message.response.VoiceMessage;
     28 
     29 /**
     30  *     @author wangtianze QQ:864620012
     31  *    @date 2017年4月19日 下午3:29:58
     32  *  <p>version:1.0</p>
     33  *     <p>description:消息处理工具类</p>
     34  */
     35 public class MessageUtil {
     36     //请求消息类型:文本
     37     public static final String REQ_MESSAGE_TYPE_TEXT = "text";
     38     //请求消息类型:图片
     39     public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
     40     //请求消息类型:语音
     41     public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
     42     //请求消息类型:视频
     43     public static final String REQ_MESSAGE_TYPE_VIDEO = "video";
     44     //请求消息类型:地理位置
     45     public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
     46     //请求消息类型:链接
     47     public static final String REQ_MESSAGE_TYPE_LINK = "link";
     48     //请求消息类型:事件推送
     49     public static final String REQ_MESSAGE_TYPE_EVENT = "event";
     50     
     51     //---------------------------------------------------------------
     52     
     53     //事件类型:subscribe(订阅)
     54     public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
     55     //事件类型:unsubscribe(取消订阅)
     56     public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
     57     //事件类型:scan(用户已关注时的扫描带参数的二维码)
     58     public static final String EVENT_TYPE_SCAN = "scan";
     59     //事件类型:LOCATION(上报地理位置)
     60     public static final String EVENT_TYPE_LOCATION = "LOCATION";
     61     //事件类型:CLICK(自定义菜单)
     62     public static final String EVENT_TYPE_CLICK = "CLICK";
     63     
     64     //---------------------------------------------------------------
     65     
     66     //响应消息类型:文本
     67     public static final String RESP_MESSAGE_TYPE_TEXT = "text";
     68     //响应详细类型:图片
     69     public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
     70     //响应消息类型:语音
     71     public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
     72     //响应消息类型:视频
     73     public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
     74     //响应详细类型:音乐
     75     public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
     76     //响应消息类型:图文
     77     public static final String RESP_MESSAGE_TYPE_NEWS = "news";
     78     
     79     //---------------------------------------------------------------
     80     
     81     //从流中解析出每个节点的内容
     82     public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{
     83         Map<String,String> map = new HashMap<String,String>();
     84         
     85         //从输入流中获取流对象
     86         InputStream in = request.getInputStream();
     87         
     88         //构建SAX阅读器对象
     89         SAXReader reader = new SAXReader();
     90         try {
     91             //从流中获得文档对象
     92             Document doc = reader.read(in);
     93             
     94             //获得根节点
     95             Element root = doc.getRootElement();
     96             
     97             //获取根节点下的所有子节点
     98             List<Element> children = root.elements();
     99             
    100             for(Element e:children){
    101                 //遍历每一个节点,并按照节点名--节点值放入map中
    102                 map.put(e.getName(), e.getText());
    103                 System.out.println("用户发送的消息XML解析为:" + e.getName() + e.getText());
    104             }
    105             
    106             //关闭流
    107             in.close();
    108             in = null;
    109         } catch (DocumentException e) {
    110             // TODO Auto-generated catch block
    111             e.printStackTrace();
    112         }
    113         
    114         return map;
    115     }
    116     
    117     /**
    118      * 用于扩展节点数据按照<ToUserName><![CDATA[toUser]]></ToUserName>,中间加了CDATA段
    119      */
    120     private static XStream xstream = new XStream(new XppDriver(){
    121         public HierarchicalStreamWriter createWriter(Writer out){
    122             return new PrettyPrintWriter(out){
    123                 boolean cdata = true;
    124                 public void startNode(String name,Class clazz){
    125                     super.startNode(name,clazz);
    126                 }
    127                 
    128                 protected void writeText(QuickWriter writer,String text){
    129                     if(cdata){
    130                         writer.write("<![CDATA[");
    131                         writer.write(text);
    132                         writer.write("]]>");
    133                     }else{
    134                         writer.write(text);
    135                     }
    136                 }
    137             };
    138         }
    139     });
    140     
    141     /**
    142      * 将文本消息对象转换成XML格式
    143      * params:textMessage 文本消息对象
    144      * return:xml
    145      */
    146     public static String messageToXml(TextMessage textMessage){
    147         xstream.alias("xml",textMessage.getClass());
    148         return xstream.toXML(textMessage);
    149     }
    150     
    151     /**
    152      * 将图片消息对象转换成XML格式
    153      * params:imageMessage
    154      * return:xml
    155      */
    156     public static String messageToXml(ImageMessage imageMessage){
    157         xstream.alias("xml", imageMessage.getClass());
    158         return xstream.toXML(imageMessage);
    159     }
    160     
    161     /**
    162      * 将语音消息对象转换成XML格式
    163      * params:voiceMessage
    164      * return:xml
    165      */
    166     public static String messageToXml(VoiceMessage voiceMessage){
    167         xstream.alias("xml",voiceMessage.getClass());
    168         return xstream.toXML(voiceMessage);
    169     }
    170     
    171     /**
    172      * 将视频消息对象转换成XML格式
    173      * params:videoMessage
    174      * return:xml
    175      */
    176     public static String messageToXml(VideoMessage videoMessage){
    177         xstream.alias("xml",videoMessage.getClass());
    178         return xstream.toXML(videoMessage);
    179     }
    180     
    181     /**
    182      * 将音乐消息对象转换成XML格式
    183      * params:musicMessage
    184      * return:xml
    185      */
    186     public static String messageToXml(MusicMessage musicMessage){
    187         xstream.alias("xml",musicMessage.getClass());
    188         return xstream.toXML(musicMessage);
    189     }
    190     
    191     /**
    192      * 将图文消息对象转换成XML格式
    193      * params:newsMessage
    194      * return:xml
    195      */
    196     public static String messageToXml(NewsMessage newsMessage){
    197         xstream.alias("xml",newsMessage.getClass());
    198         return xstream.toXML(newsMessage);
    199     }
    200 }

    第二十四步:找到包com.wtz.util下的ProcessService.java类,修改dealRequest方法响应各种类型的消息

     1 package com.wtz.util;
     2 
     3 import java.io.IOException;
     4 import java.util.Date;
     5 import java.util.Map;
     6 
     7 import javax.servlet.http.HttpServletRequest;
     8 
     9 import com.wtz.message.response.TextMessage;
    10 
    11 /**
    12  *     @author wangtianze QQ:864620012
    13  *    @date 2017年4月19日 下午8:04:14
    14  *  <p>version:1.0</p>
    15  *     <p>description:核心服务类</p>
    16  */
    17 public class ProcessService {
    18     public static String dealRequest(HttpServletRequest request){
    19         //XML格式的消息数据
    20         String respXml = "";
    21         //默认返回的文本消息内容
    22         String respContent = "未知的消息类型";
    23         //调用parseXml方法解析请求消息
    24         Map<String, String> requestMap;
    25         try {
    26             requestMap = MessageUtil.parseXml(request);
    27             //发送方账号
    28             String fromUserName = requestMap.get("FromUserName");
    29             //开发者微信号
    30             String toUserName = requestMap.get("ToUserName");
    31             //消息类型
    32             String MsgType = requestMap.get("MsgType");
    33             
    34             //回复文本消息
    35             TextMessage textMessage = new TextMessage();
    36             textMessage.setToUserName(fromUserName);
    37             textMessage.setFromUserName(toUserName);
    38             textMessage.setCreateTime(new Date().getTime());
    39             textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
    40             
    41             if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){
    42                 respContent = "您发送的是文本消息";
    43             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){
    44                 respContent = "您发送的是图片消息";
    45             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){
    46                 respContent = "您发送的是语音消息";
    47             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){
    48                 respContent = "您发送的是视频消息";
    49             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){
    50                 respContent = "您发送的是地理位置消息";
    51             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){
    52                 respContent = "您发送的是链接消息";
    53             }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){
    54                 //事件类型
    55                 String eventType = requestMap.get("Event");
    56                 if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){
    57                     respContent = "感谢您的关注";
    58                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){
    59                     //TODO 取消订阅后用户不会再收到公众号发送的消息,因此不需要回复
    60                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){
    61                     //TODO 处理扫描带参数二维码事件
    62                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){
    63                     //TODO 处理上报地理位置事件
    64                 }else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){
    65                     //TODO 处理菜单点击事件
    66                 }
    67             }
    68             //设置文本消息的内容
    69             textMessage.setContent(respContent);
    70             //将文本消息对象转换成xml
    71             respXml = MessageUtil.messageToXml(textMessage);
    72         } catch (IOException e) {
    73             // TODO Auto-generated catch block
    74             e.printStackTrace();
    75         }
    76         
    77         return respXml;
    78     }
    79 }

    各种类型消息封装完成。

  • 相关阅读:
    Flutter——Text组件(文字组件)
    Dart的导包
    Dart 面向对象 类 方法
    Dart中的匿名方法与自执行方法
    Dart的List比较特殊的几个API
    SearchView监听关闭正确方案
    Android选择多图上传
    ListView嵌套ScrollView会出现的问题
    禁用ViewPager的滑动事件
    SQLite相关异常
  • 原文地址:https://www.cnblogs.com/wangtianze/p/6739853.html
Copyright © 2020-2023  润新知