zoukankan      html  css  js  c++  java
  • 微信公众号平台开发(二)信息的分类.md

    在上一篇博客中,我们只是简单地与微信服务器建立了连接,接下来就是从微信服务器中接收信息了。在SecurityController中,我定义了两个方法(get和post)。Get方法是我们用来与微信服务器建立连接,而我们将通过Post方法来接收微信服务器发给我们的响应。

    当我们完成服务器验证后,以后用户对公众号的每个事件,微信服务器都会通过我们配置的URL推送到我们自己的服务器,然后我们服务器根据自身业务逻辑进行响应!


    在正式实现用户与服务器之间的沟通前,我们需要进行一些知识储备和对信息的分类。

    (一)消息体的类型:

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
    1. 普通消息类型:文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息和链接消息等;
    2. 事件推送类型:关注/取消关注事件、扫描带参数二维码事件、上报地理位置事件、自定义菜单事件、点击菜单拉取消息时的事件推送、点击菜单跳转链接时的事件推送等。

    (二)额外知识

    • 消息重试机制:  
        微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
    • 信息加密/解密机制:

        为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。

    关于消息加解密的详细说明,请见“[消息加解密说明]”。

    (三)接收信息的分类和实体的创建

    篇幅关系,将省略所有实体类的Get和Set方法。
    根据各种信息类型,我们将其分为一个基础类和六个实体。
    1. 接收消息基础类

    public class BaseMessage {
        //开发者微信号
        private String ToUserName;
        //发送方账号(OpenID)
        private String FromUserName;
        //消息创建时间(整型)
        private long CreateTime;
        //消息类型(text/image/location/link/video/shortvideo)
        private String MsgType;
        //消息id,64位整型
        private long MsgId;
    }
    

     1. 图片消息实体

    public class ImageMessage extends BaseMessage {
        //图片链接
        private String PicUrl;
    }
    

    链接消息实体

    public class LinkMessage extends BaseMessage {
        //消息标题
        private String Title;
        //消息描述
        private String Description;
        //消息链接
        private String Url;
    }
    

     地理位置消息实体

    public class LocationMessage extends BaseMessage {
        //地理位置纬度
        private String Location_X;
        //地理位置经度
        private String Location_Y;
        //地图缩放大小
        private String Scale;
        //地图位置信息
        private String Label;
    }
    

     文本消息实体

    public class TextMessage extends BaseMessage {
        //消息内容
        private String Content;
    }
    

     视频消息实体

    public class VideoMessage extends BaseMessage {
        //视频消息媒体id,可以调用多媒体文件下载接口拉取数据
        private String MediaId;
        //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据
        private String ThumbMediaId;
    }
    

     语音消息实体

    public class VoiceMessage extends BaseMessage {
        //媒体Id
        private String MediaId;
        //语音格式
        private String Format;
    }
    

    (四)反馈信息的分类和实体的创建

    篇幅关系,将省略所有实体类的Get和Set方法。
    根据各种反馈信息类型,我们将其分为一个基础类和六个实体(五个信息体)。
    1. 反馈信息基础类

    public class BaseMessage {
    
        //接收方账号(OpenID)
        private String ToUserName;
        //开发者微信号
        private String FromUserName;
        //消息创建时间(整型)
        private long CreateTime;
        //消息类型(text/music/news……)
        private String MsgType;
    }
    

     文本信息实体

    public class TextMessage extends BaseMessage {
        //回复消息内容
        private String Content;
    }
    

     图片信息体 和 图片信息实体

    public class Image {
        //图片信息id
        private String MediaId;
    }
    
    public class ImageMessage extends BaseMessage {
        private Image image;
    }
    

     图文信息体 和 图文信息实体

    public class Article {
        //图文消息名称
        private String Title;
        //图文消息描述
        private String Description;
        //图片链接,支持JPG、PNG格式
        private String PicUrl;
        //点击图文消息跳转链接
        private String Url;
    }
    
    public class NewsMessage extends BaseMessage {
        //图文消息个数,一般限制为10条以内
        private int ArticleCount;
        //多图文消息信息
        private List<Article>  Articles;
    }
    

     语音信息体 和 语音信息实体

    public class Voice {
        private String MediaId;
    }
    
    public class VoiceMessage extends BaseMessage {
        private Voice voice;
    }
    

     音乐信息体 和 音乐信息实体

    public class Music {
        //音乐名称
        private String Title;
        //音乐描述
        private String Description;
        //音乐链接
        private String MusicUrl;
        //高质量音乐链接,WIFI环境下优先使用该链接
        private String HQMusicUrl;
    }
    
    public class MusicMessage extends BaseMessage {
        private Music music;
    }
    

    视频信息体 和 视频信息实体

    public class Video {
        //多媒体链接
        private String MediaId;
        //视频标题
        private String Title;
        //视频描述
        private String Description;
    }
    
    public class VideoMessage extends BaseMessage {
        private Video video;
    }
    

    (五)总结

    这一篇博客主要为我们服务器与用户进行交流时,准备好各种实体类型。通过对开发者文档的阅读,我们可以很快就完成实体的创建。但在阅读的过程中,我们也将考虑到许多问题:如何进行实体与XML格式之间的转化?什么鬼之类的。
    接下来的,我们下一篇博客再讲ヾ( ̄▽ ̄)Bye~Bye~

  • 相关阅读:
    JAVA面向对象概述
    练习
    字符串
    图形代码
    assets转到内外部存储
    file存储
    sp存储
    Intent练习
    存储登录
    存储
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8108693.html
Copyright © 2011-2022 走看看