第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

微信服务器和第三方服务器之间究竟是通过什么方式进行对话的?

 

下面,我们先看下图:

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

 

其实我们可以简单的理解:

(1)首先,用户向微信服务器发送消息;

(2)微信服务器接收到用户的消息处理之后,通过开发者配置的URL和Token 来找到第三方服务器,并以XML形式向第三方服务器发送消息。

(3)第三方服务器获取这些消息之后,需要按照微信服务器传过来的XML的语言进行解析,获取到信息之后,根据用户的需求,提供服务,然后封装成XML数据,传回到微信服务器上去。

(4)微信服务器解析这些XML,并把相应的内容还回给用户。

基本就结束了一个基本的请求与相应。

 

 

一、封装请求信息

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

各消息类型的推送XML数据包结构如下:

 

 ----------------------------------------------------------------------------------------------------------------------------------------

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

----------------------------------------------------------------------------------------------------------------------------------------

详细的介绍可以参照  官网介绍

 

其中用户可以向微信服务器发送的消息类型大概可以分为:文本消息图片消息语音消息视频消息小视频消息地理位置消息链接消息

根据观察可以知道这些消息中,都会传回来这些公共的字段如:

ToUserName(开发者微信号);

FromUserName(发送方帐 号,OPEN_ID);

CreateTime(消息的创建时间);

MsgType(消息类型);

MsgId(消息ID)。

我们把这些封装成一个基类,然后 不同的部分,分别封装为各自的类,这样提高代码的重用性。

 

这个请求消息的基类BaseMessage ,主要是封装了一些共同的字段。

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(1)文本消息类Content ,主要是文本消息内容。

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(2)图片消息:

PicUrl 图片链接
MediaId 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

(3) 语音消息:

MediaId 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
Format 语音格式,如amr,speex等

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(4)视频消息:

MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

(5)小视频消息:

MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

 

 

(6) 地理位置消息:

Location_X 地理位置维度
Location_Y 地理位置经度
Scale 地图缩放大小
Label 地理位置信息
第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

(7) 链接消息:

Title 消息标题
Description 消息描述
Url 消息链接

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

 

二、封装事件

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息。

事件的数据格式为:

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

详细可以参照   官网

 

 事件基类封装

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

 (1)关注/取消关注事件

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(2)扫描带参数二维码事件

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(3)上报地理位置事件

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(4)自定义菜单事件

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

三、封装响应消息

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

     当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对 该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回 复。

    各消息类型需要的XML数据包结构如下:

    

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

详细可以查看  官网

 

同样,把消息回复中定义的所有消息都有的字段提取出来,封装成一个基类,

这些公有的字段包括:

ToUserName(接收方帐号,用户的OPEN_ID);

FromUserName(开发者的微信号);

CreateTime(消 息的创建时间);

MsgType(消息类型);

FuncFlag(消息的星标标识)。

 

响应消息的基类BaseMessage:

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

(1)回复文本消息

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

(2)回复图片消息

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

(3)回复语音消息

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

(4)回复视频消息

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

 

(5)回复音乐消息

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

(6) 回复图文消息

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装 View Code

 

 

封装结束。

 

 

为了方便,提供一下这些类的源码:

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

 

 

http://yunpan.cn/cL7KUQ4Q5tMeh  访问密码 75e7

 

 

其他文章关联:

第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

其他:Web开发须知:URL编码与解码