微信公衆平臺體系,你們最爲熟悉的,一個是公衆號,另外一個就是小程序。若是須要使用公衆號的高級功能,那麼你們首先想到的就是自組開發團隊來幹這些活兒。絕大多數狀況下,公衆號運營方會把這些工做外包出去;可是外包出去以後會有一個風險:帳號的全部權總不能外包出去吧,萬一有風險,我可以把外包工做收回。算法
微信公衆號體系原生支持這種 「外包」 思路,那就是微信第三方平臺,公衆號可以經過這套體系,將公衆號的部分功能和權限開放給第三方。這在微信開放平臺中能夠找到相應的文檔。與自有公衆號開發不一樣,微信三方平臺的受權體系是慎之又慎,筆者第一次接觸的時候,被文檔中說起的各類 token、各類 ticket 搞暈了,因而特地整理了這個流程,以圖表的方式將受權流程說明下來,便於查閱。小程序
已經學習了受權流程的同窗,能夠直接將本文拉到最後面查看完整圖。本文按照受權順序,一步一步地說明。圖中關鍵的 token 或 ticket 數據,均用彩色標出並一一對應。segmentfault
但願本文對微信三方平臺開發者可以有所幫助。api
微信三方平臺也是在微信開放平臺上的帳號,也有 appid
的概念。在微信的文檔中,三方平臺稱爲 「component
」。三方平臺須要實現一個供微信回調的 URL,在平臺中稱爲 「受權事件接收URL」(如下簡稱 「通知回調」),在應用詳情頁中進行配置。微信
不要被這個名稱誤導了,其實全部和三方平臺直接相關的事件都會通過這個 URL 通知。app
這裏涉及流程中的兩個術語:component_verify_ticket
和 component_access_token
。微信公衆平臺
微信會每十分鐘往通知回調中發送一個消息,將參數 component_verify_ticket
告知三方平臺後臺。三方平臺拿到這個消息後,則須要使用本身的 app_secret
和 appid
信息,加上微信推送的這個 ticket,經過微信三方平臺的 api_component_token 接口,向微信平臺換取 component_access_token
。學習
讓公衆號點擊受權有兩種模式,一種是引導公衆號全部者掃碼進入一個受權頁;另外一種範式是在移動端點擊連接來受權。兩種方式對後臺而言大同小異,本文講解第一種。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 的調用圖以下:
前文提到,經過 API:api_query_auth 能夠得到用於替代公衆號的authorizer_access_token
。有了這個以後,就能夠代公衆號中使用 access_token 的調用。
一樣地,這個 token 也有過時時間,所以三方平臺須要調用 API,在 token 即將失效時刷新。使用這個 API 循環刷新便可:
微信 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,也是本人的專欄。