授权流程技术说明

小程序或者公众号授权给第三方平台的技术实现流程比较简单,以公众号为例,如下图所示:

https://res.wx.qq.com/op_res/g360EANvw_kVk3WCt-rRVP5UNFVJ2pYjH6gQCmxVL58lWhow97U8wYXpB4gw-I-d

下面对其进行详细介绍, 步骤如下:

获取预授权码

第三方平台方获取预授权码(pre_auth_code),预授权码是第三方平台方实现授权托管的必备信息,可以通过本文第3部分获取。

进入授权页

引入用户进入授权页,第三方平台方可以在自己的网站中放置“微信公众号授权”或者“小程序授权”的入口, 或生成授权链接放置在移动网页中,引导公众号和小程序管理员进入授权页。

方式一:授权注册页面扫码授权

授权页网址为:

https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx
&redirect_uri=xxxx&auth_type=xxx。

参数

是否必填

参数说明

component_appid

第三方平台方appid

pre_auth_code

预授权码

redirect_uri

回调URI

auth_type

要授权的帐号类型,

1则商户扫码后,手机端仅展示公众号.

2表示仅展示小程序,

3表示公众号和小程序都展示。如果为未制定,

则默认小程序和公众号都展示。

第三方平台开发者可以使用本字段来控制授权的帐号类型。

biz_appid

指定授权唯一的小程序或公众号

方式二:点击移动端链接快速授权

第三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。

image0

授权链接为:

https://mp.weixin.qq.com/safe/bindcomponent?
action=bindcomponent&auth_type=3&no_scan=1&component_appid=xxxx&
pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect

参数

是否必填

参数说明

component_appid

第三方平台方appid

pre_auth_code

预授权码

redirect_uri

回调URI

auth_type

要授权的帐号类型:

1则商户点击链接后,手机端仅展示公众号.

2表示仅展示小程序,

3表示公众号和小程序都展示。

如果为未指定,则默认小程序和公众号都展示。

第三方平台开发者可以使用本字段来控制授权的帐号类型。

biz_appid

指定授权唯一的小程序或公众号

注意

auth_type. biz_appid 两个字段互斥。

确认登录

用户确认并同意登录授权给第三方平台方, 用户进入第三方平台授权页后,需要确认并同意将自己的公众号或小程序授权给第三方平台方,完成授权流程。

授权后回调

授权后回调 URI,得到授权码(authorization_code)和过期时间, 授权流程完成后,授权页会自动跳转进入回调 URI,并在 URL 参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600)

调用 API

利用授权码调用公众号或小程序的相关 API, 在得到授权码后,第三方平台方可以使用授权码换取授权公众号或小程序的接口调用凭据(authorizer_access_token,也简称为令牌), 再通过该接口调用凭据,按照公众号开发者文档或小程序开发文档的说明,去调用公众号或小程序相关 API。 (能调用哪些 API,取决于用户将哪些权限集授权给了第三方平台方,也取决于公众号或小程序自身拥有哪些接口权限), 使用 JS SDK 等能力。具体请见【公众号第三方平台的接口说明】

下面对各 API 和机制进行介绍(特别注意,所有 API 调用需要验证调用者 IP 地址。 只有在第三方平台申请时填写的白名单 IP 地址列表内的 IP 地址,才能合法调用,其他一律拒绝):

… 1. 推送component_verify_ticket

出于安全考虑,在第三方平台创建审核通过后,微信服务器 每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket, 用于获取第三方平台接口调用凭据。

… 2. 获取第三方平台component_access_token

第三方平台通过自己的component_appid(即在微信开放平台管理中心的第三方平台详情页中的AppID和AppSecret)和 component_appsecret,以及component_verify_ticket(每10分钟推送一次的安全ticket)来获取自己的接口调用凭据(component_access_token)

… 3. 获取预授权码pre_auth_code

第三方平台通过自己的接口调用凭据(component_access_token)来获取用于授权流程准备的预授权码(pre_auth_code)

… 4. 使用授权码换取公众号或小程序的接口调用凭据和授权信息

通过授权码和自己的接口调用凭据(component_access_token), 换取公众号或小程序的接口调用凭据(authorizer_access_token和用于前者快过期时用来刷新它的authorizer_refresh_token) 和授权信息(授权了哪些权限等信息)

… 5. 获取(刷新)授权公众号或小程序的接口调用凭据

通过authorizer_refresh_token来刷新公众号或小程序的接口调用凭据

… 6. 获取授权公众号或小程序基本信息

在需要的情况下,第三方平台可以获取公众号或小程序的帐号基本信息,包括帐号名. 帐号类型等

… 7. 获取授权方的选项设置信息

在需要的情况下,第三方平台可以获取公众号或小程序的选项设置,包括地理位置上报设置. 语音识别开关设置. 微信多客服功能开关设置

… 8. 设置授权方的选项信息

在需要的情况下,第三方平台可以修改上述公众号或小程序的选项设置, 包括地理位置上报设置. 语音识别开关设置. 微信多客服功能开关设置

… 9. 推送授权相关通知

当公众号或小程序对第三方进行授权. 取消授权. 更新授权时,将通过事件推送告诉开发者

… 接下来:代替公众号或小程序调用接口

取在完成授权后,第三方平台可通过公众号或小程序的接口调用凭据(authorizer_access_token)来代替它调用接口, 具体请见“代公众号实现业务”和“代小程序实现业务”文件夹中的内容