微信公众号平台技术文档

OpenID: 每个用户针对每个公众号都有一个 OpenID,同一个用户在不同公众号和应用有不同的 OpenID; UnionID:绑定在同一个开放平台账号下的公众号和应用用,同一个用户只有一个 UnionID; 微信公众平台(mp.weixin.qq.com):只微信公众号的业务进行开发,主要针对操作公众号功能,如用户管理、消息管理、定义菜单; 微信开放平台(open.weixin.qq.com):为移动应用、PC端网站、公众号第三方平台的开发,主要涉及授权给第三方,如授权、支付、登录功能;

  • 开发者通过 openid 获取用户基本信息时,如果该公众号或应用绑定了开放平台,用户基本信息中将会带上 unionid;
  • 公众号平台内部有测试号和调试工具进行调试;
  • 公众平台以 access_token 作为接口调用凭据,必须先获取 access_token,access_token有效期是2小时,过期需要重新获取,1天内有获取次数限制;
  • 微信公众号的接口支持 http 和 https,用的都是默认端口号80和443;

公众号分为订阅号和服务号,用于提供消息会话和公众号内网页服务。消息会话包括:群发消息,回复消息,客服消息和事件推送,服务通知模板消息。网页服务包括:网页授权获取用户基本信息,包含微信原生功能的JS-SDK(如:录制播放微信语音、监听微信分享);不同的公众号类型具有不同的接口权限。接口调用是有频次限制的,每个账号每月可以通过平台或调用接口进行清零10次。

接口调用会返回一个全局返回码,0值表示调用成功,其它表示调用失败及其原因。常用返回码(接口返回码说明有完整列表):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-1 系统繁忙,稍后重试
0 请求成功
40001 获取access_token时AppSecret错误或access_token无效
40002 不合法的凭证类型
40003 不合法的OpenID
40013 不合法的AppID
40014 不合法的access_token
41xxx  缺少参数
42xxx  各种token过期
50001  用户未授权该api

配置服务器需要在“基本设置页面”设置服务器地址(URL)来接收微信消息和事件;Token用来生成签名用作验证服务器地址;EncodingAESKey用来进行消息加解密;配置前应该先搭建好服务器对验证消息进行校验。当填写好信息点击确认后,微信服务器会发送URL?signature=SIGNATURE&timestamp=TIMESTAMP&nonce=NONCE&echostr=ECHOSTR,服务器需要校验此消息,并在校验成功时原样返回echostr参数内容,此时开发者接入成功。加密/校验流程如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

接入成功后微信会将用户发来的消息、支付订单、事件推送给该服务器处理。

接口服务器域名:api.weixin.qq.com。调用公众号接口都需要使用access_token,公众号使用AppID和AppSecret调用/cgi-bin/token来获取access_token,调用接口需要把服务器IP地址添加到IP白名单中。

微信公众号接口提供如下功能:自定义菜单、消息管理、微信网页开发、素材管理、图文消息留言管理、用户管理、账号管理、数据统计、微信卡券、微信门店、微信小店、微信设备功能、客服功能、微信摇一摇周边、微信连Wi-Fi、微信扫一扫、微信发票。消息管理需要注意信息的加解密。这些功能可以分成消息素材管理、网页开发、用户管理、支付场景、移动场景。此笔记仅关注网页开发和用户管理,其它的笔记直接参考微信公众平台文档。

公众号通过微信网页授权来获取用户基本信息。

网页授权填写的必须是域名,不用以 http:// 开头,其下的所有页面都可以进行OAuth2.0鉴权。scope中snsapi_base不需要用户手动同意,用户无感知。snsapi_userinfo网页授权需要用户手动同一,用来获取用户的基本信息,无需关注。用户管理中的“获取用户基本信息”需要用户关注后才能调用。网页授权是通过OAuth2.0机制实现的,可以获得一个网页授权access_token,这个与上述access_token是不同的,仅用于网页中接口调用,如获取用户基本信息;

网页授权分为如下步骤(此流程与开放平台中接入一致):

  1. 发起用户授权,用户授权成功后将跳转到redirect_uri/?code=CODE&state=STATE此时已经获取到用户的code;
  2. 由code换取一个特殊的网页授权access_token
  3. 拉取用户信息(需要scope为snsapi_userinfo);

还可以刷新access_token,校验access_token是否有效;

对于已经关注的用户可以调用获取用户基本信息,其中的access_token是基础access_token不同于网页授权access_token

WeUI是一套微信团队开发的专用于微信网页的基础样式库,可以用来写微信网页样式。微信JS-SDK是微信内的网页开发工具包,用于获取微信状态、直接调用微信功能,如微信分享、扫一扫、卡券支付等功能。在微信中打开 demo查看整个列表功能;