微信公众号学习笔记(上)
? 简介
本文主要记录微信公众号的学习笔记(上),包含以下内容:
1. 微信介绍
2. 微信公众号简介
3. 使用 ASP.NET 搭建微信公众平台应用程序
4. 自定义菜单开发
5. 消息接口
6. 用户管理
1. 微信介绍
微信(WeChat)是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,有张小龙所带领的腾讯广州研发中心产品团队打造。微信支付跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语言短信、视频、图片和文字。同时,也可以使用通过共享刘媒体内容的资料和基于位置的社交插件“摇一摇”、“漂流瓶”、“朋友圈”、“公众平台”、“语音记事本”等服务插件。
1) 微信部分数据统计(截止至2016年第二季度)
n 微信已经覆盖中国94%以上的智能手机
n 月活跃用户达到8.06亿
n 用户覆盖200多个国家、超过20种语言
n 各品牌的微信公众号总数已经超过800万个
n 移动应用对接数量超过85000个
n 广告收入增至36.79亿人民币
n 微信支付用户则达到了4亿左右
2) 微信发展历程
n 2011.01.21,微信1.0版正式发布
n 2012.03.29,微信用户数突破1亿
n 2012.08.17,微信公众平台上线
n 2013.10.23,用户数突破6亿,微信5.0发布,微信支付上线
n 2016年春节,用户数突破7亿,红包发放量突破4.2亿人
n 2017.01.09,微信第一批小程序正式低调上线
n 未来…
2. 微信公众号简介
微信公众平台是给个人、媒体、企业、政府和组织提供业务服务于用户管理能力的全新服务平台。可以帮助企业快速搭建公众号服务平台,通过微信渠道将品牌推广给上亿的用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。
1) 微信公众号分为三类:
1. 订阅号
订阅号是公众平台的一种类型,可以为用户提供信息和咨询。
订阅号又分为普通订阅号和认证订阅号,认证订阅号可以在聊天窗口底部设计自定义菜单,而普通订阅号则不能。
2. 服务号
服务号每个月只有4次群发机会,但消息直接显示在好友对话列表中,更容易被用户注意到。认证服务号具备9大高级接口(包括获取粉丝信息,带参二维码等重要接口),另外还包括微信支付功能。
3. 企业号
企业号可以为企业客户提供移动服务,提供企业移动应用接口。它可以帮助企业建立员工、上下游供应链和企业IT系统间的链接,实现生产、管理、协作、运营的移动化。
2) 订阅号、服务号和企业号的主要区别
对比项目 | 订阅号 | 服务号 | 企业号 |
适用人群 | 面向媒体和个人,提供一种信息传播方式 | 面向企业、政府、组织,用于为客户提供服务 | 面向企业、政府、事业单位、非政府组织,用于实现生产管理,协作运营的移动化 |
信息显示方式 | 显示在订阅号的文件夹中 | 显示在好友的对话列表中 | |
群发消息 | 每天可以群发1条消息 | 每月可以群发4条消息 | 无限制 |
发送保密消息,禁止转发 | 无 | 无 | 有 |
关注身份验证 | 无 | 无 | 有 |
基本消息接收/回复接口 | 有 | 有 | 有 |
定制应用 | 无 | 无 | 有 |
高级接口 | 认证订阅号部分支持 | 认证服务号支持 | 认证企业号支持 |
微信支付 | 无 | 可申请 | 有 |
3) 注册微信公众号
1. 打开微信公众平台
https://mp.weixin.qq.com/
2. 点击“立即注册”,选择对应的公众号类型(这里以“服务号”为例):
3. 根据流程进行注册
3. 使用 ASP.NET 搭建微信公众平台应用程序
微信公众平台提供了一系列开发接口(API), 使用这些接口开发微信应用程序之前,需要先成为微信公众平台的开发者。
1) 登录微信公众平台:https://mp.weixin.qq.com/
2) 左侧“菜单栏” -> 开发 -> 基本配置 -> 点击“成为开发者”按钮
3) 成为开发者后将获取到两个参数:
1. 开发者ID(AppID):开发者ID是公众号开发识别码,配合开发者密码可调用公众号的接口能力。
2. 开发者密码(AppSecret):开发者密码是校验公众号开发者身份的密码,具有极高的安全性。
4) 设置 IP 白名单
注意:只有设置了 IP 白名单中的 IP 才能具有获取 access_token 的权限,多个授权 IP 以回车隔开。
5) 服务器配置
点击“服务器配置”后面的“修改配置”按钮,填写服务器配置信息:
1. URL:填写的URL需要正确响应微信发送的Token验证。
2. Token:必须为英文或数字,长度为3-32字符。
3. EncodingAESKey:消息加密密钥由43位字符组成,可随机修改,字符范围为A-Z,a-z,0-9。
4. 消息加解密方式:初学者选择“明文模式”即可。
l 填写完成后,提交并启用,微信公众平台会立刻调用URL填写的地址,进行验证。
6) 验证 signature 参数
验证 signature 参数是为了防止非微信公众平台发送对微信应用的请求,所以微信公众平台对此参数进行了加密。
1. 参数如下:
1) echostr:随机字符串
2) token:该参数只有开发者才知道,可能会被修改,一般写入到配置文件中。
3) timestamp:时间戳
4) none:随机数
5) signature:微信加密签名,结合(token、timestamp、none)进行加密的结果,通过该参数就可以验证请求是否来之微信公众平台。
2. 加密与验证方式
1) 将获取的 token、timestamp、none 三个参数进行字典排序。
2) 将这三个参数的值拼接为一个字符串进行 SHA1 加密。
3) 将加密的 signature 临时字符串与请求的 signature 参数进行比较,如果相同则验证成功,否则验证失败。
7) .NET 微信接口开发基础
客户端提交数据到服务器可以使用 GET 和 POST 两种方式,GET 方式效率更高,但是限制传递的数据为2KB;而 POST 没有限制,所以通常使用 POST 向服务器提交时间。下面以具体示例,演示如何与微信公众平台交互数据:
1. 获取 access_token
access_token,即许可令牌,是公众号的全局唯一接口调用凭证。access_token 由微信公众平台提供给每个开发者,开发者调用每个微信公众平台接口时都需要提供 access_token。
access_token 有效期为2个小时,过期后需要重新获取,获取 access_token 的参数说明如下:
grant_type:为固定值client_credential
appid:应用ID
secret:应用秘钥
获取 access_token 可以采用以下两种方式:
1) 使用“微信公众平台接口调试工具”
https://mp.weixin.qq.com/debug
2) 微信应用程序代码获取
微信应用程序中调用接口:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296
5. 消息接口
微信公众平台提供了一组开发接口,用于接收和发送消息。消息包括文本消息、图片消息、语音消息、视频消息、地理位置消息、链接消息等。
1) 接收普通消息
每当微信公众平台收到消息后,都会将消息封装成 XML 字符串,然后按照配置将 XML 字符串以 POST 发送到指定的 URL。这样部署的 Web 服务器上的应用程序就可以接收处理 POST 数据了。
l 接收消息响应参数如下:
参数分类 | 参数 | 描述 |
公共 | ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) | |
CreateTime | 消息创建时间(整型) | |
MsgType | 消息类型: text: 文本消息; image: 图片消息; voice: 语言消息 video: 视频消息 shortvideo: 小视频消息 location: 地理位置消息 link: 链接消息 | |
MsgId | 消息id,64位整型 | |
文本消息 | Content | 文本消息内容 |
图片消息 | PicUrl | 图片链接(由系统生成) |
MediaId | 图片消息媒体id,可以调用获取临时素材接口拉取数据。 | |
语言消息 | MediaId | 语音消息媒体id,可以调用获取临时素材接口拉取数据。 |
Format | 语音格式,如amr,speex等 | |
视频消息/小视频消息 | MediaId | 视频消息媒体id,可以调用获取临时素材接口拉取数据。 |
ThumbMediaId | 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。 | |
地理位置消息 | Location_X | 地理位置维度 |
Location_Y | 地理位置经度 | |
Scale | 地图缩放大小 | |
Label | 地理位置信息 | |
链接消息 | Title | 消息标题 |
Description | 消息描述 | |
Url | 消息链接 |
2) 接收事件推送消息
当公众号的粉丝与公众号产生交互时,会触发一些事件。这些事件会被微信服务器推送至开发者设置的 Web 服务器。开发者可以对这些事件进行处理,包括:
1. 关注/取消关注事件
2. 扫描带参数二维码事件
3. 上报地理位置事件
4. 自定义菜单事件
l 接收消息响应参数如下:
参数分类 | 参数 | 描述 |
公共 | ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) | |
CreateTime | 消息创建时间(整型) | |
MsgType | 消息类型,event | |
关注/取消关注事件 | Event | 事件类型,subscribe(订阅)、unsubscribe(取消订阅) |
扫描带参数二维码事件 | Event | 事件类型: subscribe: 未关注 SCAN: 已关注 |
EventKey | 未关注:事件KEY值,qrscene_为前缀,后面为二维码的参数值; 已关注:事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id | |
Ticket | 二维码的ticket,可用来换取二维码图片 | |
上报地理位置事件 | Event | 事件类型,LOCATION |
Latitude | 地理位置纬度 | |
Longitude | 地理位置经度 | |
Precision | 地理位置精度 | |
自定义菜单事件 | Event | 事件类型,CLICK |
EventKey | 事件KEY值,与自定义菜单接口中KEY值对应 |
3) 被动回复用户消息
可以通过开发接口向公众号的粉丝用户发送消息,包括回复用户消息、发送客服消息、发送模板消息和群发消息等。
在 ASP.NET 中回复用户消息简单,使用下面的语句即可:
HttpContext context = HttpContext.Current;
context.Response.Write(xmlMsg);
参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543
4) 消息的加密和解密
为了保障公众号的安全,微信公众平台提供了对消息进行加密和解密的机制。可以在公众平台“基本设置”中进行设置,包含三种加密方式:明文模式、兼容模式、和安全模式。
加密模式下将推送"encrypt_type"参数,值为aes。
5) 群发消息
公众号可以向自己的粉丝群发消息,包括文本、图片、语音、视频、图文消息等。群发消息使用 POST 方式将不同类型的数据提交到:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277
6. 用户管理
可以通过用户管理的开发接口,实现对公众号粉丝用户进行管理,包括分组、修改备注信息、获取用户基本信息等。
1) 用户分组管理
开发者可以对公众号的粉丝用户进行分组管理,可以通过开发接口对用户分组进行新增、修改、删除、查询。
1. 查询所有用户分组
GET 方式请求:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842