在上一篇博客中,我们只是简单地与微信服务器建立了连接,接下来就是从微信服务器中接收信息了。在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~

微信公众号平台开发(二)信息的分类.md的更多相关文章

  1. C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

    文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...

  2. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  3. 微信公众号平台接口开发:基础支持,获取access_token

    新建Asp.net MVC 4.0项目 WeChatSubscript是项目UI层 WeChatTools是封装操作访问公众号接口的一些方法类库 获取AccssToken 我们要的得到AccessTo ...

  4. 微信公众号平台接口开发:基础支持,获取微信服务器IP地址

    官方说明 目前看不出来这个接口有哪些具体运用,但是既然有这个接口,那我们就试试能不能用 访问接口 修改WeCharBase.cs,新增以下2个方法 public static string Serve ...

  5. 微信公众号支付开发全过程 --JAVA

    按照惯例,开头总得写点感想 ------------------------------------------------------------------ 业务流程 这个微信官网说的还是很详细的 ...

  6. 到处是坑的微信公众号支付开发(java)

    之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...

  7. C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  8. C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  9. 第三方网站不能调用微信公众平台里的图片了 显示"此图片来自微信公众号平台未经允许不可引用"

    下午ytkah在自己小博客搜索时看到有几篇文章图片显示不了,再访问一些网站时发现有些图片无法显示出来,显示"此图片来自微信公众号平台未经允许不可引用",如下图所示,这个应该是最近微 ...

随机推荐

  1. C++设计模式 之 “对象性能” 模式:Singleton、Flyweight

    “对象性能”模式 面向对象很好地解决了“抽象”的问题,但是必不可免地要付出一定的代价.对于通常情况来讲,面向对象的成本大都可以忽略不计.但是某些情况,面向对象所带来的成本必须谨慎处理. 典型模式 # ...

  2. Adobe9阅读器渗透攻击——20145301

    Adobe9阅读器渗透攻击 实验步骤: 在kali终端中开启msfconsole,输入命令use exploit/windows/fileformat/adobe_cooltype_sing,进入该漏 ...

  3. 20145307陈俊达_安卓逆向分析_APKtools分析smail

    20145307陈俊达_安卓逆向分析_APKtools分析smail 引言 真刺激呢!到了第二篇博客了,难度开始加大,之前是简单的dex2jar和有图形界面的jd-gui,现在来隆重介绍强大的反汇编工 ...

  4. updateByPrimaryKeySelective更新失败

    问题:使用Mybatis中Mapper内置方法updateByPrimaryKeySelective更新失败. 发现:控制台打印出来的sql语句发现where条件出现所有属性. 解决:映射的实体类没有 ...

  5. P3939 数颜色

    目录 题目 思路1(待修莫队) 思路2(vector+二分) 代码1 代码2 题目 P3939 数颜色 思路1(待修莫队) 哇,这不是莫队模板题吗 3e5,TLE45分 不行 我有信仰啊 pow(n, ...

  6. ubuntu 安转redis

    一 ,redis 安装配置 在 Ubuntu 系统安装 Redis 可以使用以下命令: sudo apt-get update sudo apt-get install redis-server 这样 ...

  7. MySQL中datetime和timestamp的区别及使用

    MySQL中有关TIMESTAMP和DATETIME的总结 转载自iVictor,原文链接:http://www.cnblogs.com/ivictor/p/5028368.html 一.MySQL中 ...

  8. Weex 简介

    weex简介 Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能.可扩展的 native 应用,为了做到这些,Weex 与 Vue 合作,使用 Vue 作为上层框架,并遵循 ...

  9. C#学习笔记(十五):抽象方法、抽象类、多态和接口

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. C#学习笔记(十二):构造函数、属性和静态类

    面向对象 简写重载的方法:重载中如果逻辑重复的情况下,用参数少的调用参数多 参数空缺,可以用null填补 using System; using System.Collections.Generic; ...