近期需要使用第三方平台做相應的代小程序業務的開發,本篇主要針對微信開放平台的第三方平台授權流程做簡要總結。我們可以簡單理解為代管小程序或公眾號沒有開發資源,需要將自己的小程序托管給第三方公司現實業務功能,微信開放平台針對這種場景開放了第三方開發能力,本篇要講的授權也就是托管給第三方公司的第一步,授管后小程序的服務器配置、域名配置等都將修改為第三方公司提供的服務配置,如此第三方公司利用微信開發平台能力完成代管小程序需求業務功能,詳細說明見官方文檔。
小程序運營者通過授權后,第三方平台就可以代小程序完成相應的開發任務實現業務需求,我在另一篇“第三方平台代小程序實現業務”中介紹了在授權后,第三方平台如何使用微信開放平台的能力完成相關業務的開發步驟。
授權流程說明:
作為第三方開發平台,在為其他微信公眾號或小程序開發、調用其接口之前,需要先得到代管小程序屬主的授權,授權方式分為二維碼和跳轉鏈接二種。
1.接收驗證票據(component_verify_ticket)
出於安全考慮,在第三方平台創建審核通過后,微信服務器會每隔 10 分鍾會向第三方的消息接收地址推送一次 component_verify_ticket,用於獲取第三方平台接口調用憑據。
第三方的程序被動接收,建議每次都將新值放入Redis中,供其他請求獲取值(獲取令牌時使用)。
推送內容解密后的示例:
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/Authorization_Process_Technical_Description.html
相關接口文檔說明:
https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/pre_auth_code.html