一张图清晰解释微信三方平台获取授权流程

背景

微信公众平台体系,大家最为熟悉的,一个是公众号,另一个就是小程序。如果需要使用公众号的高级功能,那么大家首先想到的就是自组开发团队来干这些活儿。绝大多数情况下,公众号运营方会把这些工作外包出去;但是外包出去之后会有一个风险:账号的所有权总不能外包出去吧,万一有风险,我能够把外包工作收回。

微信公众号体系原生支持这种 “外包” 思路,那就是微信第三方平台,公众号能够通过这套体系,将公众号的部分功能和权限开放给第三方。这在微信开放平台中可以找到相应的文档。与自有公众号开发不同,微信三方平台的授权体系是慎之又慎,笔者第一次接触的时候,被文档中提及的各种 token、各种 ticket 搞晕了,于是特意整理了这个流程,以图表的方式将授权流程说明下来,便于查阅。

已经学习了授权流程的同学,可以直接将本文拉到最后面查看完整图。本文按照授权顺序,一步一步地说明。图中关键的 token 或 ticket 数据,均用彩色标出并一一对应。

希望本文对微信三方平台开发者能够有所帮助。


授权步骤

三方平台数据准备

微信三方平台也是在微信开放平台上的账号,也有 appid 的概念。在微信的文档中,三方平台称为 “component”。三方平台需要实现一个供微信回调的 URL,在平台中称为 “授权事件接收URL”(以下简称 “通知回调”),在应用详情页中进行配置。

不要被这个名称误导了,其实所有和三方平台直接相关的事件都会经过这个 URL 通知。

获取 component_access_token

这里涉及流程中的两个术语:component_verify_ticketcomponent_access_token

微信会每十分钟往通知回调中发送一个消息,将参数 component_verify_ticket 告知三方平台后台。三方平台拿到这个消息后,则需要使用自己的 app_secretappid 信息,加上微信推送的这个 ticket,通过微信三方平台的 api_component_token 接口,向微信平台换取 component_access_token

生成授权注册页面 URL

让公众号点击授权有两种模式,一种是引导公众号所有者扫码进入一个授权页;另一种范式是在移动端点击链接来授权。两种方式对后台而言大同小异,本文讲解第一种。

这里其实包含了两个小步骤:首先是三方平台后台向微信请求获得预授权码 pre_auth_code;第二步是使用这个预授权码,来组合成一个 URL 给公众号所有者扫码。

关键的参数如下(componentloginpage 是用于扫码的 URL):

公众号授权

获取授权的公众号

公众号扫码授权后,微信会向通知回调发送消息,除了告知授权的公众号(称为 “authorizer”)的 appid 之外,最重要的是推送一个新的票据字段 authorization_code,这个 code 是与授予权限的公众号绑定的:

拉取公众号信息及其授予的权限

这分别是两个 API,其中比较重要的是拉取公众号授予的权限范围,调用了接口 “api_query_auth”。除了获得授权范围之外,最重要的,是再引入两个新参数:

  • authorizer_access_token:用在后文 “代公众号调用接口” 中,替代微信公众平台的 access_token 参数。
  • authorizer_refresh_token:用于定时刷新 access_token

两个 API 的调用图如下:

代公众号实现业务

刷新 authorizer_access_token

前文提到,通过 API:api_query_auth 可以获得用于替代公众号的authorizer_access_token。有了这个之后,就可以代公众号中使用 access_token 的调用。

同样地,这个 token 也有过期时间,因此三方平台需要调用 API,在 token 即将失效时刷新。使用这个 API 循环刷新即可:

获取微信 JS-SDK 的 ticket

微信 JS-SDK 接口使用的不是 access_token,而是被称为 jsapi_ticket的一个票据。普通的公众号使用 access_token 来换取,三方平台则使用 component_access_token 来换取:

其实这个接口已经不是微信三方应用的范围了,只是普通的微信公众平台接口。但是因为非常常用,所以还是在这里说明了一下。


授权流程总览

上面所提及的各个分步骤,组合成一览图如下(图片比较宽,推荐大屏幕查看或者放大查看):

图中各个调用过程的标题,是 API 的名称,可以作为关键字在微信文档中搜索。

参考资料


本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

原文发布于:https://cloud.tencent.com/developer/article/1368038

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安恒信息

数十万安卓设备存在漏洞,你的手机还是你的吗!!!

安卓系统有一个隐藏的功能叫做开发者选项。这个功能是为了方便开发人员测试性能的时候调试手机,所以这个选项在安卓手机里是隐藏起来的,但是大多数安卓设备厂商,以及安卓...

1142
来自专栏Java架构沉思录

淘宝大秒系统设计详解

大家还记得2013年的小米秒杀吗?三款小米手机各11万台开卖,走的都是大秒系统,3分钟后成为双十一第一家也是最快破亿的旗舰店。经过日志统计,前端系统双11峰值有...

1212
来自专栏美团技术团队

前端工程化开发方案app-proto

什么是前端工程化?根据具体的业务特点,将前端的开发流程、技术、工具、经验等规范化、标准化就是前端工程化。它的目的是让前端开发能够“自成体系”,最大程度地提高前端...

5733
来自专栏悦思悦读

码农的瑞士军刀-脚本语言

首先声明,这里关于语言间的比较仅仅是为了说明问题。世界上没有一个开发语言有绝对的好坏,只有是否适合你当前的环境。 很多码农工作的非常辛苦,每天加班。一般情况,团...

40710
来自专栏架构师之路

58到家入驻微信钱包的技术优化

一、需求缘起 大伙打开微信钱包,会发现58到家入驻了微信钱包的一级入口(如下图),这个入口流量极大,微信要求被接入的H5必须能抗住n万的qps(58到家的系统是...

39211
来自专栏玄魂工作室

不明恶意攻击致<搜狗搜索><搜索结果>跳转<百度搜索>技术原理分析

先声明一点,本文作者不是搜狗的 然后 只是从技术的角度探讨问题---- 目录 不明恶意攻击致<搜狗搜索><搜索结果>跳转<百度搜索>技术原理分析 目录 * 前...

4549
来自专栏python开发者

openwrt-智能路由器hack技术(2)---"网路信息监控和窃取"

openwrt-智能路由器hack技术(2)---"网路信息监控和窃取" 1   导读 PS:之前写的一个文章,现在发现结构内容排版不是太好,导致阅读体验太差,...

53810
来自专栏腾讯研究院的专栏

常见的几种数据层容灾架构比较分享

陈守志 腾讯公司平台运营开发组 一、关于容灾   关于容灾主题,这里罗列对比了几种常见的容灾案例: ?   相对接入层、应用层容灾而言,数据层的容灾相对...

5285
来自专栏芋道源码1024

淘宝大秒系统设计详解

1. 一些数据2. 热点隔离3. 动静分离4. 基于时间分片削峰5. 数据分层校验6. 实时热点发现7. 关键技术优化点7.1 Java处理大并发动态请求优化7...

1122
来自专栏腾讯大讲堂的专栏

【折腾不止】前端工程与性能优化

作者:addy(许斌),前端开发工程师,文艺青年一枚,写得了文章,编得了代码。 作为开发,不仅仅是前端,优化总是你绕不开的事,我们的目标就是要产品变得更快。优化...

2408

扫码关注云+社区

领取腾讯云代金券