因為工作需要,接觸到微博開放平台開發。特做此記錄方便查用。
一、准備。
1.微博賬號。注冊很容易。
2.微博賬號成為開發者。
登錄微博開放平台 登錄你注冊的賬號,然后進入管理中心完善開發者基本信息和身份認證。
這個時候,還需要瀏覽一下微博開放平台的文檔,來了解一些這個開放平台的一些規范性的名詞。
每個鏈接都點進去看看,順便看看微博API文檔,你會發現,里邊有介紹說,一些接口的調用需要獲取access_token。本文就是要實現這個目標。
二、創建應用。
比如咱們要開發一個網站,然后在這個網站里邊對接微博開放平台,調用開放平台的接口。那么我們需要在登錄微博開放平台之后創建一個應用。
創建應用完成之后,會得到應用的App key 和App Secret 。然后咱們在拿着個這些信息 調用新浪微博的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 | 應用權限不足 |
全文參考:http://open.weibo.com/