微信公众号学习笔记(上)


?  简介

本文主要记录微信公众号的学习笔记(上),包含以下内容:

1.   微信介绍

2.   微信公众号简介

3.   使用 ASP.NET 搭建微信公众平台应用程序

4.   自定义菜单开发

5.   消息接口

6.   用户管理

 

1.   微信介绍

微信(WeChat)腾讯公司2011121推出的一个为智能终端提供即时通讯服务的免费应用程序,有张小龙所带领的腾讯广州研发中心产品团队打造。微信支付跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语言短信、视频、图片和文字。同时,也可以使用通过共享刘媒体内容的资料和基于位置的社交插件“摇一摇”、“漂流瓶”、“朋友圈”、“公众平台”、“语音记事本”等服务插件。

 

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-Za-z0-9

4.   消息加解密方式:初学者选择“明文模式”即可。

l  填写完成后,提交并启用,微信公众平台会立刻调用URL填写的地址,进行验证。

 

6)   验证 signature 参数

验证 signature 参数是为了防止非微信公众平台发送对微信应用的请求,所以微信公众平台对此参数进行了加密。

1.   参数如下:

1)   echostr:随机字符串

2)   token:该参数只有开发者才知道,可能会被修改,一般写入到配置文件中。

3)   timestamp:时间戳

4)   none:随机数

5)   signature:微信加密签名,结合(tokentimestampnone)进行加密的结果,通过该参数就可以验证请求是否来之微信公众平台。

 

2.   加密与验证方式

1)   将获取的 tokentimestampnone 三个参数进行字典排序。

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

消息id64位整型

文本消息

Content

文本消息内容

图片消息

PicUrl

图片链接(由系统生成)

MediaId

图片消息媒体id,可以调用获取临时素材接口拉取数据。

语言消息

MediaId

语音消息媒体id,可以调用获取临时素材接口拉取数据。

Format

语音格式,如amrspeex

视频消息/小视频消息

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