1. 程式人生 > 實用技巧 >微博開放平臺開發(一)獲取access_token

微博開放平臺開發(一)獲取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 應用許可權不足