一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

微信公众平台消息接口开发教程 附封装工具实例

时间:2013-08-19 编辑:简简单单 来源:一聚教程网

微信公众平台消息接口

要接收微信平台发送的消息,我们需要先熟悉微信公众平台API中消息接口部分,点此进入,点击后将进入到消息接口指南部分,如下图所示:

在上图左侧可以看到微信公众平台目前开放的接口有三种:消息接口、通用接口和自定义菜单接口。通用接口和自定义菜单接口只有拿到内测资格才能调用,而内测资格的申请也已经关闭了,我们只有期待将来某一天微信会对大众用户开放吧,所以没有内测资格的用户就不要再浪费时间在这两个接口上,只需要用好消息接口就可以了

消息推送和消息回复

下面将主要介绍消息接口。对于消息的接收、响应我们只需要关注上图中的"4 消息推送"和"5 消息回复"就足够了。

我们先来了解接口中的"消息推送"指的是什么,点击"4 消息推送",可以看到接口中的"消息推送"指的是"当普通用户向公众帐号发消息时,微信服务器将POST该消息到填写的URL上",即这里定义的是用户能够发送哪些类型的消息、消息有哪些字段、消息被微信服务器以什么方式转发给我们的公众帐号后台。

 


消息推送中定义了我们将会接收到的消息类型有5种:文本消息、图片消息、地理位置消息、链接消息和事件推送,其实语音消息我们也能够接收到的,只不过拿不到具体的语音文件而以(需要内测资格才能够获取语音文件)。

接口中的"消息回复"定义了我们能回复给用户的消息类型、消息字段和消息格式,微信公众平台的接口指南中是这样描述的:

 


上面说到我们能回复给用户的消息有5种,但目前在开发模式下能回复的消息只有3种:文本消息、音乐消息和图文消息,而语音消息和视频消息目前只能在编辑模式下使用。

消息的封装

接下来要做的就是将消息推送(请求)、消息回复(响应)中定义的消息进行封装,建立与之对应的Java类(Java是一门面向对象的编程语言,封装后使用起来更方便),下面的请求消息是指消息推送中定义的消息,响应消息指消息回复中定义的消息。

请求消息的基类

把消息推送中定义的所有消息都有的字段提取出来,封装成一个基类,这些公有的字段包括:ToUserName(开发者微信号)、FromUserName(发送方帐号,OPEN_ID)、CreateTime(消息的创建时间)、MsgType(消息类型)、MsgId(消息ID),封装后基类org.liufeng.course.message.req.BaseMessage的代码如下:

 代码如下 复制代码

package org.liufeng.course.message.req;

/**
 * 消息基类(普通用户 -> 公众帐号)
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class BaseMessage {
 // 开发者微信号
 private String ToUserName;
 // 发送方帐号(一个OpenID)
 private String FromUserName;
 // 消息创建时间 (整型)
 private long CreateTime;
 // 消息类型(text/image/location/link)
 private String MsgType;
 // 消息id,64位整型
 private long MsgId;

 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 long getMsgId() {
  return MsgId;
 }

 public void setMsgId(long msgId) {
  MsgId = msgId;
 }
}

 
请求消息之文本消息 package org.liufeng.course.message.req;

 代码如下 复制代码

/**
 * 文本消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class TextMessage extends BaseMessage {
 // 消息内容
 private String Content;

 public String getContent() {
  return Content;
 }

 public void setContent(String content) {
  Content = content;
 }
}

请求消息之图片消息 package org.liufeng.course.message.req;

 代码如下 复制代码

/**
 * 图片消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class ImageMessage extends BaseMessage {
 // 图片链接
 private String PicUrl;

 public String getPicUrl() {
  return PicUrl;
 }

 public void setPicUrl(String picUrl) {
  PicUrl = picUrl;
 }
}

请求消息之地理位置消息 package org.liufeng.course.message.req;

 代码如下 复制代码

/**
 * 地理位置消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class LocationMessage extends BaseMessage {
 // 地理位置维度
 private String Location_X;
 // 地理位置经度
 private String Location_Y;
 // 地图缩放大小
 private String Scale;
 // 地理位置信息
 private String Label;

 public String getLocation_X() {
  return Location_X;
 }

 public void setLocation_X(String location_X) {
  Location_X = location_X;
 }

 public String getLocation_Y() {
  return Location_Y;
 }

 public void setLocation_Y(String location_Y) {
  Location_Y = location_Y;
 }

 public String getScale() {
  return Scale;
 }

 public void setScale(String scale) {
  Scale = scale;
 }

 public String getLabel() {
  return Label;
 }

 public void setLabel(String label) {
  Label = label;
 }
}

请求消息之链接消息 package org.liufeng.course.message.req;

 代码如下 复制代码

/**
 * 链接消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class LinkMessage extends BaseMessage {
 // 消息标题
 private String Title;
 // 消息描述
 private String Description;
 // 消息链接
 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 getUrl() {
  return Url;
 }

 public void setUrl(String url) {
  Url = url;
 }
}

请求消息之语音消息 package org.liufeng.course.message.req;

 代码如下 复制代码

/**
 * 音频消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class VoiceMessage extends BaseMessage {
 // 媒体ID
 private String MediaId;
 // 语音格式
 private String Format;

 public String getMediaId() {
  return MediaId;
 }

 public void setMediaId(String mediaId) {
  MediaId = mediaId;
 }

 public String getFormat() {
  return Format;
 }

 public void setFormat(String format) {
  Format = format;
 }
}

响应消息的基类
同样,把消息回复中定义的所有消息都有的字段提取出来,封装成一个基类,这些公有的字段包括:ToUserName(接收方帐号,用户的OPEN_ID)、FromUserName(开发者的微信号)、CreateTime(消息的创建时间)、MsgType(消息类型)、FuncFlag(消息的星标标识),封装后基类org.liufeng.course.message.resp.BaseMessage的代码如下:

 代码如下 复制代码

package org.liufeng.course.message.resp;

/**
 * 消息基类(公众帐号 -> 普通用户)
 *
 * @author liufeng
 * @date 2013-05-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;
 }
}

 
响应消息之文本消息 package org.liufeng.course.message.resp;

 代码如下 复制代码

/**
 * 文本消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class TextMessage extends BaseMessage {
 // 回复的消息内容
 private String Content;

 public String getContent() {
  return Content;
 }

 public void setContent(String content) {
  Content = content;
 }
}响应消息之音乐消息 package org.liufeng.course.message.resp;

/**
 * 音乐消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class MusicMessage extends BaseMessage {
 // 音乐
 private Music Music;

 public Music getMusic() {
  return Music;
 }

 public void setMusic(Music music) {
  Music = music;
 }
}

音乐消息中Music类的定义 package org.liufeng.course.message.resp;

 代码如下 复制代码

/**
 * 音乐model
 *
 * @author liufeng
 * @date 2013-05-19
 */
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 musicUrl) {
  HQMusicUrl = musicUrl;
 }

}

响应消息之图文消息 package org.liufeng.course.message.resp;

 代码如下 复制代码

import java.util.List;

/**
 * 文本消息
 *
 * @author liufeng
 * @date 2013-05-19
 */
public class NewsMessage extends BaseMessage {
 // 图文消息个数,限制为10条以内
 private int ArticleCount;
 // 多条图文消息信息,默认第一个item为大图
 private List

Articles;

 public int getArticleCount() {
  return ArticleCount;
 }

 public void setArticleCount(int articleCount) {
  ArticleCount = articleCount;
 }

 public List

getArticles() {
  return Articles;
 }

 public void setArticles(List

articles) {
  Articles = articles;
 }
}图文消息中Article类的定义 package org.liufeng.course.message.resp;

/**
 * 图文model
 *
 * @author liufeng
 * @date 2013-05-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 null == Description ? "" : Description;
 }

 public void setDescription(String description) {
  Description = description;
 }

 public String getPicUrl() {
  return null == PicUrl ? "" : PicUrl;
 }

 public void setPicUrl(String picUrl) {
  PicUrl = picUrl;
 }

 public String getUrl() {
  return null == Url ? "" : Url;
 }

 public void setUrl(String url) {
  Url = url;
 }

}

全部消息封装完成后,Eclipse工程中关于消息部分的结构应该与下图保持一致,如果不一致的(类名、属性名称不一致的)请检查后调整一致,因为后面的章节还要介绍如何将微信开发中通用的类方法、与业务无关的工具类封装打成jar包,以后再做微信项目只需要引入该jar包即可

热门栏目