由於工做須要,接觸到微博開放平臺開發。特作此記錄方便查用。html
1、準備。api
1.微博帳號。註冊很容易。瀏覽器
2.微博帳號成爲開發者。服務器
登陸微博開放平臺 登陸你註冊的帳號,而後進入管理中心完善開發者基本信息和身份認證。app
這個時候,還須要瀏覽一下微博開放平臺的文檔,來了解一些這個開放平臺的一些規範性的名詞。eclipse
每一個連接都點進去看看,順便看看微博API文檔,你會發現,裏邊有介紹說,一些接口的調用須要獲取access_token。本文就是要實現這個目標。ide
2、建立應用。工具
好比我們要開發一個網站,而後在這個網站裏邊對接微博開放平臺,調用開放平臺的接口。那麼咱們須要在登陸微博開放平臺以後建立一個應用。開發工具
建立應用完成以後,會獲得應用的App key 和App Secret 。而後我們在拿着個這些信息 調用新浪微博的auth2.0認證獲取access_token。測試
在獲得access_token以後,咱們就能夠調用咱們須要的接口了,例如發個微博等等。
1.建立引用的地方。開放平臺--》點擊上面導航菜單「微連接」。這裏微連接的概念也是這個開放平臺的一個名詞。具體含義能夠看看相關文檔。
2.建立什麼類型的應用?
隨意,看你的狀況。測試的時候建立什麼均可以,試一下,放心的搞吧。我建立的是網頁引用,應爲我發現簡單點進去以後,也不須要填寫過多的信息。
以下圖:
建立完成以後,在個人應用能夠看到:
點進去能夠看到應用相關的信息。一下子咱們須要用到這裏邊的 app key和app secret ,而且須要配置應用受權回調地址。
3、下載微博開發 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/
3、運行程序獲取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
整個流程效果日誌:
4、總結本例中 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 | 應用權限不足 |
全文參考:http://open.weibo.com/