今天研究了一天新浪open api的授权,遇到各种问题,比较郁闷,最后终于成功通过api发了一条微博,总结一下。PS:粗略浏览了新浪提供的API还是有很多功能,感觉很不错,可惜就是没有一个好用的入门手册,有些坑就是等着别人去跳的。
新浪API主要针对三类应用,网站,客户端(移动/PC),站内应用。只要注册了新浪微博账号,就可以创建应用。我研究的是PC客户端 C++接口,一开始新建的应用是站内应用,要在PC本地上进行授权,老是各种问题,后来重新建了一个应用,选择“移动应用”,创建的时候选择“桌面”即可。
创建好应用之后,要使用接口需要授权,授权用的是OAuth2.0,这个是一个通用的授权框架,具体见http://oauth.net/2/,很多网站的授权都用的这个玩意。
下面看一下OAuth2.0的流程,有两种方式,下面讲解第一种方式
![](https://img-blog.csdn.net/20130519231933108)
其中Client指第三方应用,Resource Owner指用户,Authorization Server是我们的授权服务器,Resource Server是API服务器。
1 第三方应用打开一个网页给用户,这个网页是新浪微博提供的,让用户授权第三方应用读取用户信息
2 用户授权后,新浪微博的授权页面会向第三方应用返回一个授权码,第三方应用根据授权码到鉴权服务器获取一个令牌环,用作后续调用接口的依据
3 第三方应用根据令牌环调用新浪微博的API
上面第一步叫做OAuth2/authorize,第二步叫做OAuth2/access_token,这两个步骤完成授权。
还有一种方式,不需要第一步,第二部里面不需要授权码,但是需要密码。密码是我们创建的应用通过新浪审核之后,可以在“接口管理”里面申请的。注意这个玩意,就是个坑,新浪的说明里面没有提到这种方式。
我用weibo c++接口首页的例子,里面没有第一步,直接到第二步,就是第二种方式。我一开始没有搞明白第一种与第二种的区别,把第一种方式的授权码用到第二种里面,一直行不通。
这两种方式在c++接口中,对应的接口如下
eWeiboResultCode oauth2(const char* userName, const char* password, UserTaskInfo* pTask = NULL);
eWeiboResultCode oauth2Code(const char* authCode, const char* url, UserTaskInfo* pTask = NULL);
oauth2第一和第二个参数是微博用户名和密码,oauth2Code的第一个和第二个参数是授权码和授权回调url地址
根据OAuth2.0,使有oauth2Code成功发送了一条微博。