一張圖清晰解釋微信三方平臺獲取授權流程

背景

微信公衆平臺體系,大家最爲熟悉的,一個是公衆號,另一個就是小程序。如果需要使用公衆號的高級功能,那麼大家首先想到的就是自組開發團隊來幹這些活兒。絕大多數情況下,公衆號運營方會把這些工作外包出去;但是外包出去之後會有一個風險:賬號的所有權總不能外包出去吧,萬一有風險,我能夠把外包工作收回。

微信公衆號體系原生支持這種 “外包” 思路,那就是微信第三方平臺,公衆號能夠通過這套體系,將公衆號的部分功能和權限開放給第三方。這在微信開放平臺中可以找到相應的文檔。與自有公衆號開發不同,微信三方平臺的授權體系是慎之又慎,筆者第一次接觸的時候,被文檔中提及的各種 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 來換取:

其實這個接口已經不是微信三方應用的範圍了,只是普通的微信公衆平臺接口。但是因爲非常常用,所以還是在這裏說明了一下。


授權流程總覽

<span id='總覽'>上面所提及的各個分步驟,組合成一覽圖如下(圖片比較寬,推薦大屏幕查看或者放大查看):<>

圖中各個調用過程的標題,是 API 的名稱,可以作爲關鍵字在微信文檔中搜索。

參考資料


本文章採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。

本文地址:https://segmentfault.com/a/1190000017402102

原文發佈於:https://cloud.tencent.com/developer/article/1368038,也是本人的專欄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章