微博開放平臺開發(一)獲取access_token

由於工做須要,接觸到微博開放平臺開發。特作此記錄方便查用。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/

相關文章
相關標籤/搜索