微信开放平台-第三方平台授权流程及接口概述

时间:2024-02-23 20:28:50

近期需要使用第三方平台做相应的代小程序业务的开发,本篇主要针对微信开放平台的第三方平台授权流程做简要总结。我们可以简单理解为代管小程序或公众号没有开发资源,需要将自己的小程序托管给第三方公司现实业务功能,微信开放平台针对这种场景开放了第三方开发能力,本篇要讲的授权也就是托管给第三方公司的第一步,授管后小程序的服务器配置、域名配置等都将修改为第三方公司提供的服务配置,如此第三方公司利用微信开发平台能力完成代管小程序需求业务功能,详细说明见官方文档

小程序运营者通过授权后,第三方平台就可以代小程序完成相应的开发任务实现业务需求,我在另一篇“第三方平台代小程序实现业务”中介绍了在授权后,第三方平台如何使用微信开放平台的能力完成相关业务的开发步骤。

 

授权流程说明

作为第三方开发平台,在为其他微信公众号或小程序开发、调用其接口之前,需要先得到代管小程序属主的授权,授权方式分为二维码和跳转链接二种。

 

1.接收验证票据(component_verify_ticket)

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

第三方的程序被动接收,建议每次都将新值放入Redis中,供其他请求获取值(获取令牌时使用)。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/component_verify_ticket.html

推送内容解密后的示例:

1 <xml>
2 <AppId>some_appid</AppId>
3 <CreateTime>1413192605</CreateTime>
4 <InfoType>component_verify_ticket</InfoType>
5 <ComponentVerifyTicket>some_verify_ticket</ComponentVerifyTicket>
6 </xml>

 

 

2.获取令牌(component_access_token)

第三方平台通过component_appid和 component_appsecret,以及 component_verify_ticket(每 10 分钟推送一次的安全 ticket)来获取自己的接口调用凭据(component_access_token)

(微信开放平台管理中心的第三方平台详情页中可以查看的 AppID 和 AppSecret)。 

在需要授权时,第三方平台程序主动发送POST请求获取,单个令牌有效期为2个小时(7200s),在令牌快过期时(比如1小时50分),重新调用接口获取,可以将其存储在Redis中。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/component_access_token.html

POST数据示例

{
  "component_appid":  "appid_value" ,
  "component_appsecret":  "appsecret_value",
  "component_verify_ticket": "ticket_value"
}

返回数据示例

{
  "component_access_token": "61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
  "expires_in": 7200
}

 

3.获取预授权码(pre_auth_code)

通过第二步获取的接口调用凭据(component_access_token)来获取用于授权流程准备的预授权码(pre_auth_code)。

每个预授权码有效期为10分钟(600s)需将其存储在Redis中,生成授权页会使用。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/pre_auth_code.html

请求参数说明

参数类型必填说明
component_access_token string 第三方平台component_access_token,不是authorizer_access_token
component_appid string 第三方平台 appid

返回数据示例:

{
  "pre_auth_code": "Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw",
  "expires_in": 600
}

 

 

4.引入用户进入授权页

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

用户进入第三方平台授权页后,需要确认并同意将自己的公众号或小程序授权给第三方平台方,完成授权流程,授权方式分为以下两种,详细介绍

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

授权页网址为:

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

 

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

授权链接地址:

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

 

5.获取授权码(pre_auth_code

当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码。

回调URI中会接收授权码信息和过期时间(redirect_url?auth_code=xxx&expires_in=600)(获取接口调用凭据时使用)

 

6.获取接口调用凭据(authorizer_access_token)

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

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/authorization_info.html

 

7.获取/刷新授权公众号或小程序的接口调用凭据

authorizer_refresh_token刷新令牌(在授权的公众号具备API权限时,才有此返回值),刷新令牌主要用于第三方平台获取和刷新已授权用户的 authorizer_access_token。

一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌。用户重新授权后,之前的刷新令牌会失效,所以建议来刷新公众号或小程序的接口调用凭据。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/api_authorizer_token.html

 

8、第三方平台接口使用

通过以上授权流程,获取到微信小程序的接口调用凭据authorizer_access_token后即可完成相应的业务开发了。

如小程序基本信息接口,以下可以获取小程序的基本信息:

 GET https://api.weixin.qq.com/cgi-bin/account/getaccountbasicinfo?access_token=ACCESS_TOKEN

 接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Mini_Program_Information_Settings.html

 

详细授权流程说明:

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Authorization_Process_Technical_Description.html

相关接口文档说明:

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/pre_auth_code.html