微博开放平台开发(一)获取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/

相关文章
相关标签/搜索