微信公众号平台开发(二)信息的分类.md
来源:互联网 发布:哪款网络电视机好 编辑:程序博客网 时间:2024/05/19 13:28
在上一篇博客中,我们只是简单地与微信服务器建立了连接,接下来就是从微信服务器中接收信息了。在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;}
- 图片消息实体
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~
- 微信公众号平台开发(二)信息的分类.md
- 微信公众平台开发:基础篇(微信公众号能够发送的各类图文信息总结)
- 微信公众平台开发 获得公众号的access_token
- 微信公众号开发流程(二)--微信公众平台对接BAE
- 微信js的引用 - 微信公众平台开发:微信公众号开
- 微信公众平台开发——企业网站与微信的信息推送
- 微信公众平台开发:基础篇(微信公众平台如何设置欢迎信息)
- 微信公众号开发二:关于授权网页获取用户微信信息注册用户的开发
- 微信公众平台的基本开发
- 开发微信公众平台的基本功能
- 微信公众平台的开发
- 微信公众平台开发(二) 微信公众平台示例代码分析
- 微信公众平台开发(PHP)(二) 微信公众平台示例代码分析
- 微信公众平台开发(二) 微信公众平台示例代码分析
- 微信公众平台开发(二) 微信公众平台示例代码分析
- 微信公众平台开发(二) 微信公众平台示例代码分析
- 微信公众平台开发(二) 微信公众平台示例代码分析
- 微信公众平台开发(二) 微信公众平台示例代码分析
- 网络爬虫的原理和案例
- innodb_autoinc_lock_mode的表现形式和选值参考
- RecyclerView基础用法
- HTML_13_javascript_小游戏_开心消消乐
- Leetcode #407 Trapping Rain Water
- 微信公众号平台开发(二)信息的分类.md
- MongoDB基本使用
- java标识符 运算符
- Docker学习笔记之top,inspect,exec,export命令
- 【CodeForces】445A - DZY Loves Chessboard(dfs)
- C语言之——左旋字符串
- 第九周OJ总结<7>-大奖赛计分
- 技术转行产品总结思考(一)
- jquery加载页面的方法(页面加载完成就执行)