这半个月看了下微信公众平台,想把自己的微信公众号弄起来。所以就了解了下微信公众平台,做个笔记,主要是为了理顺自己的思路。
微信公众平台的基本介绍
微信公众平台是为微信用户提供资讯和服务的平台,这句话我觉得精准的说明了微信公众平台是干嘛的了:提供资讯(信息的分享)和服务(企业/个人和微信用户的业务交互)。
微信公众平台提供服务的方式有两种:第一就是可视化的运营平台,这是一种 SaaS 平台,不具备编程能力的人就能操作,相信重视微信公众平台的企业一定有公众号运营岗位。
第二就是公众平台 API 接口,个人理解为是一种 PaaS 平台,腾讯将它的服务 API 化(它的服务其实提供了一个互动平台),以便满足开发者不同的运营需求。
为了精准定位公众号的使用范围,微信公众平台提供了订阅号、服务号、企业号。
对于腾讯来说,划分的原因很清晰,订阅号服务于个人、服务号服务于企业外部、企业号服务于企业内部。
对于公众号提供者来说(开发者),这三种服务模式的不同点:
- API 的权限和能力不同。
- 需要付费(微信或者企业认证) 。
这里提下:个人开发者假如使用订阅号提供服务,由于不支持个人的微信认证,那么基本上不建议使用 API 的开发模式(因为权限太少了),所以还是老老实实的做自媒体。
比如我,本来想使用 API 的模式来提供我的订阅号,但是发现 API 权限太少(消息接口能用,菜单管理接口不能用),假如你想使用 API 模式,就用不了管理后台的菜单功能;假如你使用管理后台创建菜单,又完全不能使用 API,这是一个互逆的过程。
对于微信用户来说,这三种服务模式的不同点:
- 订阅号是折叠的,每天收到的推送消息是不会提醒的。
- 服务号就像一个微信用户一样,出现在消息列表中。
微信公众平台成功的原因
对于企业来说公众平台已经成为了一种标配,微信公众平台是企业和用户很好的一种纽带,企业将很多企业的服务放到了平台上的原因:
- 开发成本特别的小(相比较 APP 而言)。
- 微信这个平台很好,企业的服务托管在平台上,普通用户很容易搜索到,同时忠诚度也非常高。
- 现在人手一部手机,而有些企业原来只有网站服务,微信公众平台提供了一种简单的模式可以将服务从网站迁移到手机上(做 APP 成本是很高的)。
- 服务模式的变更,原来企业和用户通信的方式一般是基于电话和短信,而现在可以通过平台和平台消息,方便的同时成本也很低。
打个比方,我用的比较多的服务号就是“广发银行”,别人给我转账我瞬间能收到微信消息,查余额我也非常轻松的点点按钮就能获取(完全不需要 APP),同时有什么优惠活动服务号也能即使给我发送资讯(让我突然想起为啥要出现小程序了)。
而对于个人的订阅号来说,微信公众平台提供了很好的发布机制,只要你用心的去写,你的关注度可能就会更高,同时传播也毫无门槛,写的好还有人打赏,何乐不为呢?(为啥不在写呢?)
其实不管是互联网还是其他行业,选择的根本原因是一致的:成本、效果、用户。
换个思路,大家想想,去吃饭的时候,以前还有微博扫码,为什么现在完全消失了呢?
公众平台运营后台包括什么
假如你是个人或者一个小企业,不具备技术开发能力,那么熟练使用微信公众运营后台就很重要了。
由于不具备开发能力,所以公众号就是强调资讯,而资讯就是文章(可以是文字、图片、音频、视频),在公众平台中,这称为素材(这个名词觉得非常不好),公众平台提供了一个可视化编辑器来编辑内容,标题、概要、封面图片是核心三要素。
那么如何将素材发布出去呢?公众平台提供了群发功能,群发功能其实就是将素材发布给用户,可以选择不同的时间点发布,也可以选择不同的受众发布。
为了加强交互,公众平台提供了自定义菜单和自动回复功能,当然这两个功能是相当弱的,假如具备技术开发能力,可以好好利用。
由于是一个资讯平台,所以公众平台很贴心的提供了数据分析功能,让你更好的了解你的用户和文章。
开发者如何使用 API
自己是开发人员,上面说的都基本引用官方的文档,这个章节是个人开发过程中的一些体会。
公众号 API 主要通过公众号消息会话和公众号内网页来为用户提供服务,消息会话是公众号与用户交互的基础,对于公众号内网页部分自己还没有进行尝试,所以主要是消息会话部分。
首先理解 OpenID 的概念,在 API 开发中,每个微信用户在公众号中使用 OpenID 来表示的,一个微信用户对于不同的公众号来说是不同的,假如你需要获取微信用户的 UnionID,你需要去微信开放平台将公众号和开放平台帐号进行绑定。
想成为个人订阅号很容易,注册和银行卡验证(确认个人信息)就可以了。
想成为开发者也不复杂,有虚拟主机和域名就可以了。
注册个人订阅号有一个问题非常不解,信公众号其实也是一个微信号(普通用户),所以不能重名。
下面重可读性,方便性,安全性几个角度来说说公众平台 API :
可读性
公众平台的文档写的非常不错,充分考虑使用者可能会遇到的问题,还写了非常好的例子,结构上也非常清晰,比微博开放平台好多了。
方便性
对于开发者来说,开发方便很重要,公众平台在这方面做的很不错,比如提供了 接口报警机制、接口在线调试、问答系统、接口测试号申请(即使没有微信认证,也可以通过测试号测试高级接口)。
安全性
安全性分两部分:
对于微信公众平台的安全性,微信所有的接口都以 HTTPS 协议提供,假如开发者要主动调用 API ,需要先获取 access_token(这个 access_token是开发者的 access_token,而不是每个用户的 access_token),假如这个 access_token被截获安全性怎么办?
对于开发者的安全性,公众平台做了很多:
- 考虑到开发者的接口可能不是 HTTPS 协议的,所以提供了数据加密机制。
- 签名机制,为了开发者获取到的数据不是公众平台发的,提供了数据签名机制(具体算法就不说明了)
- 防止开发者获取到的数据不是公众平台发的,公众平台提供了自己服务器的 IP 列表
公众平台 API 具体包含那些
- 发送消息接口
- 接收消息接口
- 素材管理接口
- 菜单管理接口
假如希望公众号的菜单多元化一点,可以根据自己的业务或者时间创建不同的菜单。
假如希望创建资讯,你可以从自己的数据库查询出数据,然后调用素材管理接口创建素材。
假如用户给你发送不同的消息(文本或者图文等等),接收消息接口可以让你自动回复(根据不同的场景)。
接收消息接口也可以在交互过程中,一些关键操作事件会通知开发者,比如关注公众号、扫描二维码、触发菜单,接收消息接口也会通知开发者。
涉及到具体开发的时候,可以找一个 SDK,我选择的是 PHP-SDK。SDK 是为了方便开发的,不是说有了 SDK 你就不去看 API 了,为了了解 API 提供的功能,必须了解 API 的使用规范。
这个 PHP SDK 的具体实现并不复杂,额外的收获有两点:
- 微信的接口都是以 XML POST 数据方式提供的。微信的接口包括下发接口和上行接口。
- SDK 通过
file_get_contents("php://input")
和$GLOBALS["HTTP_RAW_POST_DATA"]
的方式获取流数据,然后用 XML 扩展来解析。
下面举个例子(包含 SDK 就可以运行了),其中几个参数说明下:
- appid 和 appsecret 是 Oauth 的标配参数 。
- token 不是 access_token 的意思, 相当于一个标识符(令牌) 。
- encodingaeskey,假如开发者没有 HTTPS 的服务,可以通过约定的算法进行数据的加解密。
- logcallback,SDK 提供的一个重载方法,可以记录日志。
include_once("wechat-php-sdk/wechat.class.php");
$options = array(
'token' => '',
'encodingaeskey' => '',
'appid' => '',
'appsecret' => '',
'logcallback' => 'error_log',
'debug' =>true,
);
$weObj = new Wechat($options);
$weObj->valid();
$type = $weObj->getRev()->getRevType();
switch ($type) {
case Wechat::MSGTYPE_TEXT:
$id = $weObj->getRevID();
$content = $weObj->getRevContent();
$FromUserName = $weObj->getRevFrom();
$msg = "您好,我是虞大胆" ;
$weObj->text($msg)->reply();
break;
case Wechat::MSGTYPE_IMAGE:
$arr = $weObj->getRevPic();
$msg = $arr['picurl'] . "_" . $arr['mediaid'];
$weObj->text($msg)->reply();
break;
//(链接消息,主要是收藏中的文章)
case Wechat::MSGTYPE_LINK:
$arr = $weObj->getRevLink();
$msg = serialize($arr);
$weObj->text($msg)->reply();
break;
case Wechat::MSGTYPE_EVENT:
$event = $weObj->getRevEvent();
switch ($event) {
}
break;
}
隐藏在 SDK 中的几个细节:
- access_token,微信的某些上行接口,需要获取微信的授权,所以开发者需要获取开发者的 access_token(不是用户的 access_token,在公众号内网页开发模式中会说),为了避免接口限制, access_token 应该缓存住(这个 SDK 预留了接口,以便开发者自己实现缓存功能)。
- 在打开开发者模式的时候,微信需要验证开发者的接口是否可用,有些开发者可能很疑惑这个 SDK 怎么处理的,其实已经将细节隐藏到 SDK 中了。
- 对于微信的下发接口,假如开发者的接口没有任何响应(比如输出字符),则微信会重试三次。