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

weixin_33807284發表於2018-12-17

背景

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

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

相關文章