兩種帳號模式
- 「百度商業帳號」:面向百度推廣、百度網盟、百度聯盟、百度統計、百度司南等帳號,能夠理解爲面向企業用戶。
- 「百度帳戶」:面向百度搜索、百度貼吧、百度雲盤、百度知道、百度文庫等產品,面向通常個體用戶。
- 兩種帳戶系統不同,不互通。網上教程與類庫,針對的是「百度商業帳號」,針對「百度帳戶」的教程幾乎沒有。
- 本文介紹的是「百度帳戶」的接入方式。
兩種帳戶系統使用的調用憑證不一樣
「百度商業帳號」html
- 調用接口使用的是「token」
- 「token」在「百度統計-數據導出服務」頁面,點擊「當即開通」,由系統自動生成。
「百度帳戶」node
- 在「百度統計-數據導出服務」頁沒有「當即開通」的按鈕。
- 調用接口使用的是「access_token」,而不是「token」
- 「access_token」須要通過 oauth/2.0 協議生成。
access_token 生成過程
首次換取 access_token 的過程,須要在瀏覽器端完成,沒法純服務器端完成git
【第零步】github
【第一步】後端
- 在瀏覽器中,訪問這個連接
http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=${apiKey}&redirect_uri=${redirect_uri}&scope=basic&display=popup
- 瀏覽器將重定向到百度受權的頁面,用戶進行登陸受權
【第二步】api
- 用戶登陸受權,輸入帳號密碼受權
- 受權成功後,將重定向到 redirect_uri 中,並在 URL 中攜帶 code 參數。
- redirect_uri 地址,須要在「安全設置」中配置
- 這一步須要在瀏覽器中完成,沒法脫離瀏覽器,靠純服務器完成。
【第三步】瀏覽器
- 經過 code 換取 access_token
- 訪問這個連接
http://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=${code}&client_id=${apiKey}&client_secret=${secretKey}&redirect_uri=${redirect_uri}
- 返回只是一個包含「access_token」與「refresh_token」的 json
【刷新 access_token 】安全
- access_token 的有效期是一個月,refresh_token 是十年。
- 經過「apiKey」「secretKey」與「refresh_token」可調用接口刷新「access_token」與「refresh_token」。
- 無需再經由服務器。
【總結】服務器
- 除去首次獲取「access_token」外,後續接口調用,以及「access_token」的刷新,都可在服務器端完成。須要再經由瀏覽器。
【注意】
- redirect_uri 與百度統計的網站域名沒有關係。只校驗是否在「安全設置」中配置過。除此之外,沒有限制(內網地址都行)。
- redirect_uri 只在「第一步」「第三步」中使用,只用於首次換取 access_token,只使用一次。刷新 access_token 不須要用到。
redirect_uri 保存不生效的坑
- 筆者偶現 redirect_uri 保存不生效,實際生效的還是以前填的回調地址。
- 可新開項目便可解決該問題。
鑑於只有初次建立 access_token 的過程纔會到瀏覽器,且後續狀況 redirect_uri 都是無心義的。故首次獲取 access_token 的過程是不可複用,只需一次的。筆者將該步驟封裝成工具,供獲取 access_token 使用。
使用方式
- 將工具連接
http://blog.luckly-mjw.cn/tool-show/baidu-statistics/index.html
填入「安全設置」中。redirect_uri 只用於回調,無域名限制,無安全風險。
- 填入「API Key」「Secret Key」,僅用於後續將 code 換取爲 access_token。只保存在 localStorage,獲取成功後清除。不通過接口,不會上傳到雲端。可查閱源碼驗證,無安全風險。
- 點擊按鈕,便可完成 access_token 獲取,將獲取後的 「access_token」 與 「refresh_token」保存至服務器。便可永久刷新,正常調用接口。
本地部署生成器
- 若不放心工具的使用,可下載 node 後端腳本,啓動服務器完成該過程
- 【第零步】下載腳本,並填入「API Key」「Secret Key」
- 【第一步】執行
node index.js
,啓動腳本
- 【第二步】將本地 URL
http://127.0.0.1:10005/
填入「安全設置」中
- 【第三步】在瀏覽器中方式
http://127.0.0.1:10005/getCode
,便可獲取 access_token
- access_token 獲取成功後,可經過該工具,測試 access_token 的有效性,並驗證接口調用結果。
完結撒花,感謝閱讀。