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

背景

微信公衆平臺體系,你們最爲熟悉的,一個是公衆號,另外一個就是小程序。若是須要使用公衆號的高級功能,那麼你們首先想到的就是自組開發團隊來幹這些活兒。絕大多數狀況下,公衆號運營方會把這些工做外包出去;可是外包出去以後會有一個風險:帳號的全部權總不能外包出去吧,萬一有風險,我可以把外包工做收回。算法

微信公衆號體系原生支持這種 「外包」 思路,那就是微信第三方平臺,公衆號可以經過這套體系,將公衆號的部分功能和權限開放給第三方。這在微信開放平臺中能夠找到相應的文檔。與自有公衆號開發不一樣,微信三方平臺的受權體系是慎之又慎,筆者第一次接觸的時候,被文檔中說起的各類 token、各類 ticket 搞暈了,因而特地整理了這個流程,以圖表的方式將受權流程說明下來,便於查閱。小程序

已經學習了受權流程的同窗,能夠直接將本文拉到最後面查看完整圖。本文按照受權順序,一步一步地說明。圖中關鍵的 token 或 ticket 數據,均用彩色標出並一一對應。segmentfault

但願本文對微信三方平臺開發者可以有所幫助。api


受權步驟

三方平臺數據準備

微信三方平臺也是在微信開放平臺上的帳號,也有 appid 的概念。在微信的文檔中,三方平臺稱爲 「component」。三方平臺須要實現一個供微信回調的 URL,在平臺中稱爲 「受權事件接收URL」(如下簡稱 「通知回調」),在應用詳情頁中進行配置。微信

不要被這個名稱誤導了,其實全部和三方平臺直接相關的事件都會通過這個 URL 通知。app

獲取 component_access_token

這裏涉及流程中的兩個術語:component_verify_ticketcomponent_access_token微信公衆平臺

微信會每十分鐘往通知回調中發送一個消息,將參數 component_verify_ticket 告知三方平臺後臺。三方平臺拿到這個消息後,則須要使用本身的 app_secretappid 信息,加上微信推送的這個 ticket,經過微信三方平臺的 api_component_token 接口,向微信平臺換取 component_access_token學習

生成受權註冊頁面 URL

讓公衆號點擊受權有兩種模式,一種是引導公衆號全部者掃碼進入一個受權頁;另外一種範式是在移動端點擊連接來受權。兩種方式對後臺而言大同小異,本文講解第一種。spa

這裏其實包含了兩個小步驟:首先是三方平臺後臺向微信請求得到預受權碼 pre_auth_code;第二步是使用這個預受權碼,來組合成一個 URL 給公衆號全部者掃碼。3d

關鍵的參數以下(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 國際許可協議 進行許可。

本文地址:http://www.javashuo.com/article/p-dznkoxem-nw.html

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

相關文章
相關標籤/搜索