微博開放平臺開發(一)獲取access_token
轉自:https://www.cnblogs.com/demingblog/p/5517255.html
一、準備。
1.微博賬號。註冊很容易。
2.微博賬號成為開發者。
登入微博開放平臺 登入你註冊的賬號,然後進入管理中心完善開發者基本資訊和身份認證。
這個時候,還需要瀏覽一下微博開放平臺的文件,來了解一些這個開放平臺的一些規範性的名詞。
每個連結都點進去看看,順便看看微博API文件,你會發現,裡邊有介紹說,一些介面的呼叫需要獲取access_token。本文就是要實現這個目標。
二、建立應用。
比如咱們要開發一個網站,然後在這個網站裡邊對接微博開放平臺,呼叫開放平臺的介面。那麼我們需要在登入微博開放平臺之後建立一個應用。
建立應用完成之後,會得到應用的App key 和AppSecret 。然後咱們在拿著個這些資訊 呼叫新浪微博的auth2.0認證獲取access_token。
在得到access_token之後,我們就可以呼叫我們需要的介面了,例如發個微博等等。
1.建立引用的地方。開放平臺--》點選上面導航選單“微連結”。這裡微連結的概念也是這個開放平臺的一個名詞。具體含義可以看看相關文件。
2.建立什麼型別的應用?
隨意,看你的情況。測試的時候建立什麼都可以,試一下,放心的搞吧。我建立的是網頁引用,應為我發現簡單點進去之後,也不需要填寫過多的資訊。
如下圖:
建立完成之後,在我的應用可以看到:
點進去可以看到應用相關的資訊。一會兒我們需要用到這裡邊的 app key和app secret ,並且需要配置應用授權回撥地址。
三、下載微博開發 SDK.
開發SDK裡邊有一些示例,可以直接作為參考。下載地址。我下載的是Java版的 weibo4j,下載之後,匯入開發工具。如下圖:
程式碼比較多,別慌,先找到examples包下面的oauth2 包下的OAuth4Code 類。我們需要執行這個類。
這個類完成了oauth操作,這一步驟包括兩次請求
第一次: https://api.weibo.com/oauth2/authorize?client_id=1234567890&redirect_uri=https://api.weibo.com/oauth2/default.html&response_type=code 第二次: https://api.weibo.com/oauth2/access_token
注意,第一次請求中有一個client_id,這個引數需要我們在config.properties中配置,它對應我們上面建立的應用的app key。
同樣的,這個配置檔案裡邊還有一個client_SERCRET,它對應於我們上面建立的應用的app sercret,複製過來放進去。
這裡還有個引數redirect_uri,比較關鍵。當我們執行OAuth4Code這個類的時候,在第一次請求完了之後,這個地址會被回撥,同時帶過來一個code引數。
我們需要複製這個引數,輸入到控制檯,然後回車,第二次請求便發起了,這個請求會返回我們需要的access_token。那麼問題來了,這個地址怎麼配置?
1.在上面建立的引用中,找到 介面管理--》授權機制 也沒有個配置 回撥地址的地方。填寫https://api.weibo.com/oauth2/default.html 就可以了。
2.上面的這個連結對應的要配置到config.properties中,如下:
client_ID = 1234567890 client_SERCRET = 890a2ab550cf8d7a0090ff2f19850f3a redirect_URI = https\://api.weibo.com/oauth2/default.html baseURL=https://api.weibo.com/2/ accessTokenURL=https://api.weibo.com/oauth2/access_token authorizeURL=https://api.weibo.com/oauth2/authorize rmURL=https\://rm.api.weibo.com/2/
三、執行程式獲取access_token。
在上面的第二步驟完成之後,配置都配置好了之後。執行下面這個類:
public class OAuth4Code { public static void main(String [] args) throws WeiboException, IOException{ Oauth oauth = new Oauth(); BareBonesBrowserLaunch.openURL(oauth.authorize("code")); System.out.println(oauth.authorize("code")); System.out.print("Hit enter when it's done.[Enter]:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String code = br.readLine(); Log.logInfo("code: " + code); try{ System.out.println(oauth.getAccessTokenByCode(code)); } catch (WeiboException e) { if(401 == e.getStatusCode()){ Log.logInfo("Unable to get the access token."); }else{ e.printStackTrace(); } } } }
執行程式之後,在控制檯輸入了一行日誌之後,並進入等待控制檯輸入的狀態了,馬上瀏覽器打開了一個頁面,經過跳轉之後頁面變成了下面這個:
複製瀏覽器位址列的 code 引數值。回到myeclipse中,貼上這個值,然後回車。程式繼續執行,利用這個code引數,再次發起請求 最終成功之後可以得到access_token
整個流程效果日誌:
四、總結本例中 oauth授權流程。
兩次請求
第一次:
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
同意授權之後,會重定向:
//同意授權後會重定向 http://www.example.com/response&code=CODE
第二次:
根據上面的code再次發起請求。得到access_token
其中會碰到一些問題,主要原因是,授權地址配置的不正確。按照本文的例子配置,可以成功的執行程式。獲得access_token。
錯誤碼有如下情況:
錯誤碼(error) | 錯誤編號(error_code) | 錯誤描述(error_description) |
---|---|---|
redirect_uri_mismatch | 21322 | 重定向地址不匹配 |
invalid_request | 21323 | 請求不合法 |
invalid_client | 21324 | client_id或client_secret引數無效 |
invalid_grant | 21325 | 提供的Access Grant是無效的、過期的或已撤銷的 |
unauthorized_client | 21326 | 客戶端沒有許可權 |
expired_token | 21327 | token過期 |
unsupported_grant_type | 21328 | 不支援的 GrantType |
unsupported_response_type | 21329 | 不支援的 ResponseType |
access_denied | 21330 | 使用者或授權伺服器拒絕授予資料訪問許可權 |
temporarily_unavailable | 21331 | 服務暫時無法訪問 |
appkey permission denied | 21337 | 應用許可權不足 |