新浪微博开发获取access_token的艰难过程

一个网络问题困扰了我好几天,终于幸运的解决了.

言归正传,笔者按照M了个J的教程来进行新浪的开发,到抓取微博数据的时候挂了,一直无法读取微博接口,现在仍没解决,不过我新建了一个应用,用自己的账号调试通过了.接下来说说遇到的几个坑.

网络用的AFN框架,开发环境Xcode5,ARC.最开始一直按照MJ的做法用response_type=token来获取,一直挂,万念俱灰.后Google到有人说这个方式被新浪用来只开放给web了,客户端没戏,尝试着获取code,然后再用code获取access_token的方式来开发.第一步获取code依然没什么大的问题,只要你的回调地址跟URL里一致,开发者身份认证通过,测试账号OK,这一步问题不大.然后是第二步,怎么通过code获取access_token?后来发现其实也不难,只是对于一个不懂网络的人来说,一直没注意到一个点.这个点是请求的类型.

步骤:

1.获取登录界面

NSURL *url =
[NSURLURLWithString:[NSStringstringWithFormat:@"https://open.weibo.cn/oauth2/authorize?client_id=%@&redirect_uri=%@&display=mobile",kAppKey,kRedirectURL]];

NSURLRequest *request =
[[NSURLRequest alloc]
initWithURL:url];

[_webView loadRequest:request];

注:https://api.weibo.com这个网址也可以,我都试过了,但是新浪的文档里说用open那个,其实都一样,这个时候你会觉得新浪有点2.

2.获取code

这一步太容易,不贴代码,抓取code的原理是,你第一步登录后,登录成功,webView会转到你之前创建应用时写的回调页面,拦截该请求,并抓取请求里的code就好.

3.用code获取access_token

NSString *str =
[NSStringstringWithFormat:@"https://api.weibo.com/oauth2/access_token?client_id=%@&client_secret=%@&grant_type=authorization_code&redirect_uri=%@&code=%@",kAppKey,kAppSecret,kRedirectURL,code];

NSMutableURLRequest *request =
[NSMutableURLRequestrequestWithURL:[NSURLURLWithString:str]];

#warning 设置请求为post请求!!!

[request setHTTPMethod:@"POST"];

AFJSONRequestOperation *operation =
[AFJSONRequestOperation
JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request,
NSHTTPURLResponse *response, id JSON) {

NSLog(@"成功%@",JSON);

if (_account ==
nil) {

_account =
[[Account alloc] init];

}

// 打印账号信息并设置账号

_account.accessToken =
JSON[kAccessToken];

_account.uid =
JSON[KUid];

NSLog(@"access_token=%@,uid=%@",_account.accessToken,_account.uid);

[self nickName]; 
  // 后续方法

} failure:^(NSURLRequest *request,
NSHTTPURLResponse *response, NSError *error,
id JSON) {

NSLog(@"失败--%@--%@--%@",request,response,error);

}];

[operation start];

至此结束,拿到access_token,然后各位自行去读取微博数据吧.

经过这次折腾,发现打印错误信息非常有用,比如我之前收到非常多乱七八糟的错误,一个个Google,真心坑,不知道是AFN的问题还是新浪那边的问题,后来我发现一个AFN和新浪不匹配的问题,在获取access_token的过程中,会提示失败,打印错误会告诉你AFN不能识别返回的信息格式,改一下AFN的源代码就好了.

AFJSONRequestOperation默认不接收text/plain类型的数据,当服务器返回text/plain类型的数据时,会认为出错了。可以通过修改源代码解决问题

+ (NSSet *)acceptableContentTypes {

return [NSSet
setWithObjects:@"text/plain", @"application/json", @"text/json", @"text/javascript", nil];

}

通常里边有三个了,只需要加一个@"text/plain"进去就好,具体该方法所在的文件,搜索一下就出来了,注意只需要添加到一个文件
里,该方法好几个文件里都有,不要乱加.

这几天一直想骂新浪,搞个开放平台,那么多人在问同一个问题没人鸟,官方的SDK使用维护的QQ群里问问题也没人鸟,真是扯淡.另外上面说的用MJ的方式只能访问用户接口,不能访问微博接口的问题,估计是response_type=token这个方式过时了的.新浪这2货更新了接口也不去更新文档,新浪的文档里还说客户端必须设置回调页,我没设置也抓取到数据了,S..B新浪.

总结:

1.不用官方SDK,自己动手写网络部分代码时,回调页有没有无所谓如果有要一致,签名包名什么的跟我没关系.

2.拿不到code说明回调页不一致或者url拼写错误,如果都不是检查当前登录账号是否已设置为测试账号.

3.AFN框架需要几个框架要加进去.

4.新浪2..B.

时间: 2024-11-05 03:20:38

新浪微博开发获取access_token的艰难过程的相关文章

微信公众号开发——获取access_token(PHP版)

access_token是调用微信接口的唯一凭据,每两小时刷新一次,我们需要每两小时就获取一次access_token. <?php class TokenUtil { //获取access_token并保存到token.txt文件中 public static function build_access_token(){ $ch = curl_init(); //初始化一个CURL对象 curl_setopt($ch, CURLOPT_URL, "https://api.weixin.q

android 新浪微博登录获取access_token值的问题

今天测试那边小MM说 工程师这边新浪微博登录不上,我当时就想这个不是做好了么,自己测试登录下果然不行,后来发现微博授权是成功了但是要获取openid和access_token传递给后台,发现access_token值为null,马上就把友盟的demo运行debug了下 ,因为友盟这些值是存放在Bundle里,debug发现qq登录和微博登录返回的值不一样,如下代码就行 mController.doOauthVerify(LoginResultActivity.this, SHARE_MEDIA.

微博开放平台开发(一)获取access_token

因为工作需要,接触到微博开放平台开发.特做此记录方便查用. 一.准备. 1.微博账号.注册很容易. 2.微博账号成为开发者. 登录微博开放平台  登录你注册的账号,然后进入管理中心完善开发者基本信息和身份认证. 这个时候,还需要浏览一下微博开放平台的文档,来了解一些这个开放平台的一些规范性的名词. 每个链接都点进去看看,顺便看看微博API文档,你会发现,里边有介绍说,一些接口的调用需要获取access_token.本文就是要实现这个目标. 二.创建应用. 比如咱们要开发一个网站,然后在这个网站里

微信公众号平台接口开发:基础支持,获取access_token

新建Asp.net MVC 4.0项目 WeChatSubscript是项目UI层 WeChatTools是封装操作访问公众号接口的一些方法类库 获取AccssToken 我们要的得到AccessToken,这是所有接口访问的基础,我们看看官方给出的接口调用文档 很简单明了,grant_type=client_credential,这是固定的不会变 appid与secret就是前面一章我叫大家记起来的那个认证口令数据. 下边我们来实现这个功能,新建WeCharBase.cs 1 public c

微信开发之(二)获取access_token

官方文档说明:获取access token 在上面的官方文档中我们可以直接在最底下的链接里面进行测试例如: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET   是否必须 说明 grant_type 是 获取access_token填写client_credential appid 是 第三方用户唯一凭证 secret 是 第三方用户唯一凭证密钥

Delphi XE7 用indy开发微信公众平台(1)- 获取access_token、expires_in

获取access_token.expires_in function GetMethod(HTTP: TIdHTTP; Url: String; Max: Integer): String; var RespData: TStringStream; begin RespData := TStringStream.Create('', TEncoding.UTF8); try try HTTP.Get(Url, RespData); HTTP.Request.Referer := Url; Res

.Net实现微信公众平台开发接口(二) 之 “获取access_token”

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 参数说明 参数 是否必须 说明 grant_type 是 获取access_token填写client_credential appid 是 第三方用

iOS开发项目篇—17OAuth授权过程

iOS开发项目篇—17OAuth授权过程 一.网页演示 1.打开开放平台的地址 2.创建应用 3.填写个人开发者信息 4.创建新的应用 5.查看微博提供的api接口 6.在这里使用的是OAuth2 7.接口的完整说明 说明:提供的URL就是登陆界面 8.创建后的应用信息 9.不能直接访问提供的URL,还需要传入必要的参数 传入必要的参数: client_id true string 申请应用时分配的AppKey // 得知道给哪个应用授权 redirect_uri true string 授权回

获取access_token

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效. 公众平台的API调用所需的access_token的使用及生成方式说明: 1.为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器.而其他业务逻辑服务器所使