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


因為工作需要,接觸到微博開放平台開發。特做此記錄方便查用。

 

一、准備。

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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM