• java开发微信公众号2


    接收方消息处理

    1.各种消息处理类

      1 import java.io.InputStream;
      2 import java.io.Writer;
      3 import java.util.HashMap;
      4 import java.util.List;
      5 import java.util.Map;
      6 
      7 import javax.servlet.http.HttpServletRequest;
      8 
      9 import org.dom4j.Document;
     10 import org.dom4j.Element;
     11 import org.dom4j.io.SAXReader;
     12 
     13 import com.eastnet.wechat.message.resp.Article;
     14 import com.eastnet.wechat.message.resp.MusicMessage;
     15 import com.eastnet.wechat.message.resp.NewsMessage;
     16 import com.eastnet.wechat.message.resp.TextMessage;
     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 
     23 /**
     24  * 各种消息的处理类 
     25  * @author pengsong
     26  * @date 2016.01.19
     27  */
     28 
     29 public class MessageUtil {
     30     /**
     31      * 返回信息类型:文本
     32      */
     33     public static final String  RESP_MESSSAGE_TYPE_TEXT = "text";
     34     /**
     35      * 返回信息类型:音乐
     36      */
     37     public static final String  RESP_MESSSAGE_TYPE_MUSIC = "music";
     38     /**
     39      * 返回信息类型:图文
     40      */
     41     public static final String  RESP_MESSSAGE_TYPE_NEWS = "news";
     42     /**
     43      * 请求信息类型:文本
     44      */
     45     public static final String  REQ_MESSSAGE_TYPE_TEXT = "text";
     46     /**
     47      * 请求信息类型:图片
     48      */
     49     public static final String  REQ_MESSSAGE_TYPE_IMAGE = "image";
     50     /**
     51      * 请求信息类型:链接
     52      */
     53     public static final String  REQ_MESSSAGE_TYPE_LINK = "link";
     54     /**
     55      * 请求信息类型:地理位置
     56      */
     57     public static final String  REQ_MESSSAGE_TYPE_LOCATION = "location";
     58     /**
     59      * 请求信息类型:音频
     60      */
     61     public static final String  REQ_MESSSAGE_TYPE_VOICE = "voice";
     62     /**
     63      * 请求信息类型:推送
     64      */
     65     public static final String  REQ_MESSSAGE_TYPE_EVENT = "event";
     66     /**
     67      * 事件类型:subscribe(订阅)
     68      */
     69     public static final String  EVENT_TYPE_SUBSCRIBE = "subscribe";
     70     /**
     71      * 事件类型:unsubscribe(取消订阅)
     72      */
     73     public static final String  EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
     74     /**
     75      * 事件类型:click(自定义菜单点击事件)
     76      */
     77     public static final String  EVENT_TYPE_CLICK= "CLICK";
     78     
     79     /**
     80      * 事件类型:view(自定义菜单点击事件,返回url)
     81      */
     82     public static final String  EVENT_TYPE_VIEW= "VIEW";
     83     /**
     84      * 解析微信发来的请求 XML 
     85      */
     86     @SuppressWarnings("unchecked")
     87     public static Map<String,String> pareXml(HttpServletRequest request) throws Exception {
     88         
     89         //将解析的结果存储在HashMap中
     90         Map<String,String> reqMap = new HashMap<String, String>();
     91         
     92         //从request中取得输入流
     93         InputStream inputStream = request.getInputStream();
     94         //读取输入流
     95         SAXReader reader = new SAXReader();
     96         Document document = reader.read(inputStream);
     97         //得到xml根元素
     98         Element root = document.getRootElement();
     99         //得到根元素的所有子节点
    100         List<Element> elementList = root.elements();
    101         //遍历所有的子节点取得信息类容
    102         for(Element elem:elementList){
    103             reqMap.put(elem.getName(),elem.getText());
    104         }
    105         //释放资源
    106         inputStream.close();
    107         inputStream = null;
    108         
    109         return reqMap;        
    110     }
    111     /**
    112      * 响应消息转换成xml返回
    113      * 文本消息对象转换成xml
    114      */
    115     public  static String textMessageToXml(TextMessage textMessage) {
    116         xstream.alias("xml", textMessage.getClass());
    117         return xstream.toXML(textMessage);
    118     }
    119     /**
    120      * 音乐消息的对象的转换成xml
    121      * 
    122      */
    123     public  static String musicMessageToXml(MusicMessage musicMessage) {
    124         xstream.alias("xml", musicMessage.getClass());
    125         return xstream.toXML(musicMessage);
    126     }
    127     /**
    128      * 图文消息的对象转换成xml
    129      * 
    130      */
    131     public  static String newsMessageToXml(NewsMessage newsMessage) {
    132         xstream.alias("xml", newsMessage.getClass());
    133         xstream.alias("item", new Article().getClass());
    134         return xstream.toXML(newsMessage);
    135     }
    136     /**
    137      * 拓展xstream,使得支持CDATA块
    138      * 
    139      */
    140     private static XStream xstream = new XStream(new XppDriver(){
    141         public HierarchicalStreamWriter createWriter(Writer out){
    142             return new PrettyPrintWriter(out){
    143                 //对所有的xml节点的转换都增加CDATA标记
    144                 boolean cdata = true;
    145                 
    146                 @SuppressWarnings("unchecked")
    147                 public void startNode(String name,Class clazz){
    148                     super.startNode(name,clazz);
    149                 }
    150                 
    151                 protected void writeText(QuickWriter writer,String text){
    152                     if(cdata){
    153                         writer.write("<![CDATA[");
    154                         writer.write(text);
    155                         writer.write("]]>");
    156                     }else{
    157                         writer.write(text);
    158                     }
    159                 }
    160             };
    161         }
    162     });
    163     
    消息处理MessageUtil

         消息类型

    /**
     * 消息基类 
     * @author pengsong
     * @date 2016.01.19
     */
    public class BaseMessage {
        //接收方账号(收到的openId)
        private String ToUserName;
        //开发者微信号
        private String FromUserName;
        //消息创建时间(整型)
        private long CreateTime;
        //消息类型(text/music/news)
        private String MsgType;
        //位0x0001 被标记时,星标刚收到的消息
        private int FuncFlag;
        public String getToUserName() {
            return ToUserName;
        }
        public void setToUserName(String toUserName) {
            ToUserName = toUserName;
        }
        public String getFromUserName() {
            return FromUserName;
        }
        public void setFromUserName(String fromUserName) {
            FromUserName = fromUserName;
        }
        public long getCreateTime() {
            return CreateTime;
        }
        public void setCreateTime(long createTime) {
            CreateTime = createTime;
        }
        public String getMsgType() {
            return MsgType;
        }
        public void setMsgType(String msgType) {
            MsgType = msgType;
        }
        public int getFuncFlag() {
            return FuncFlag;
        }
        public void setFuncFlag(int funcFlag) {
            FuncFlag = funcFlag;
        }
    }
    BaseMessage
    public class NewsMessage extends BaseMessage{
        //图文消息的个数,限制为10条以内
        private int ArticleCount;
        //条条图文消息信息,默认第一个item为大图
        private List<Article> Article;
        public int getArticleCount() {
            return ArticleCount;
        }
        public void setArticleCount(int articleCount) {
            ArticleCount = articleCount;
        }
        public List<Article> getArticle() {
            return Article;
        }
        public void setArticle(List<Article> article) {
            Article = article;
        }
    }
    响应图文消息 NewsMessage
    public class TextMessage extends BaseMessage{
        //回复的消息类容
        private String Content;
    
        public String getContent() {
            return Content;
        }
    
        public void setContent(String content) {
            Content = content;
        }
    
    }
    响应文本消息
    /**
     * 图文消息中的Article类的定义
     * 图文model
     * @author pengsong
     * @date 2015.01.19
     *
     */
    public class Article {
        //图文消息名称
        private String Title;
        //图文消息描述
        private String Description;
        //图文链接,支持JPG,PNG,格式,较好的效果为大图640*320,小图
        //80*80,限制图片链接的域名需要与开发者填写的基本资料中的url一致
        private String PicUrl;
        //点击图文消息跳转的链接
        private String Url;
        
        public String getTitle() {
            return Title;
        }
        
        public void setTitle(String title) {
            Title = title;
        }
        
        public String getDescription() {
            return Description;
        }
        
        public void setDescription(String description) {
            Description = description;
        }
        
        public String getPicUrl() {
            return PicUrl;
        }
        
        public void setPicUrl(String picUrl) {
            PicUrl = picUrl;
        }
        
        public String getUrl() {
            return Url;
        }
        
        public void setUrl(String url) {
            Url = url;
        }
        
    }
    Article
    /**
     * 音乐消息中的Music定义
     * 音乐中的model
     *
     */
    public class Music {
        //音乐名称
        private String Title;
        //音乐描述
        private String Description;
        //音乐链接
        private String MusicUrl;
        //高质量音乐链接,WIFI环境下优先使用该链接播放音乐
        private String HQMusicUrl;
        public String getTitle() {
            return Title;
        }
        public void setTitle(String title) {
            Title = title;
        }
        public String getDescription() {
            return Description;
        }
        public void setDescription(String description) {
            Description = description;
        }
        public String getMusicUrl() {
            return MusicUrl;
        }
        public void setMusicUrl(String musicUrl) {
            MusicUrl = musicUrl;
        }
        public String getHQMusicUrl() {
            return HQMusicUrl;
        }
        public void setHQMusicUrl(String hQMusicUrl) {
            HQMusicUrl = hQMusicUrl;
        }
        
    }
    Music
    public class MusicMessage extends BaseMessage{
        //音乐
        private Music Music;
    
        public Music getMusic() {
            return Music;
        }
    
        public void setMusic(Music music) {
            Music = music;
        }
        
    }
    MusicMessage
  • 相关阅读:
    vim删除以#,空格开头的行
    Element-ui 中对表单进行验证
    VUE页面实现加载外部HTML方法
    vue-cli2嵌入html
    文字环绕图片
    LocalDate计算两个日期相差天数
    springboot+vue脚手架使用nginx前后端分离
    通过 Netty、ZooKeeper 手撸一个 RPC 服务
    Spring Native 项目,把 Spring 项目编译成原生程序!
    印象笔记吐槽
  • 原文地址:https://www.cnblogs.com/LW-baiyun/p/7889924.html
Copyright © 2020-2023  润新知