新浪微博客户端(14)-截取回调地址中的授权成功的请求标记,换取access_token

DJOAuthViewController.m

#import "DJOAuthViewController.h"
#import "AFNetworking.h"


@interface DJOAuthViewController () <UIWebViewDelegate>

@end

@implementation DJOAuthViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    /* client_id&redirect_uri */
    NSString *client_id = @"249054863";
    NSString *redirect_uri = @"https://www.baidu.com";
    
    UIWebView *webView = [[UIWebView alloc] init];
    webView.frame = self.view.bounds;
    webView.delegate = self;
    
    [self.view addSubview:webView];
    
    NSString *urlString = [NSString stringWithFormat:@"https://api.weibo.com/oauth2/authorize?client_id=%@&redirect_uri=%@",client_id,redirect_uri];
    
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    
    [webView loadRequest:urlRequest];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


#pragma mark - webView 代理方法

- (void)webViewDidStartLoad:(UIWebView *)webView {
//    DJLog(@"webView开始加载");

}


- (void)webViewDidFinishLoad:(UIWebView *)webView {

//    DJLog(@"webView结束加载");

}


/** 此方法可用于拦截http请求 */
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString *urlString = request.URL.absoluteString;
    DJLog(@"current access url str : %@",urlString);

    // 1. 判断当前地址是否是回调地址(https://www.baidu.com/?code=27a3d9fb9bbc5d3c20be9ae8e4331b02)
    NSRange range= [urlString rangeOfString:@"code="];
    if (range.length != 0) { // 是回调地址
        // 2.截取code=后面的参数值
        NSUInteger fromIndex = range.location + range.length;
        NSString *code = [urlString substringFromIndex:fromIndex]; // code 就是授权成功的请求标记
        // 3.使用授权成功的请求标记(code)来换取accessToken
        [self getAccessTokenWithCode:code];
    }
    
    
    
    return YES;
}




- (void)getAccessTokenWithCode:(NSString *)code {

    // 1. 创建请求管理者
    AFHTTPSessionManager *requestManager = [AFHTTPSessionManager manager];
    
    // 2. 配置请求参数
    NSString *urlString = @"https://api.weibo.com/oauth2/access_token"; // 请求授权的access_token URL
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"client_id"] = @"249054863";
    params[@"client_secret"] = @"71d5b761bac9f377af3b938f6d89ba85";
    params[@"grant_type"] = @"authorization_code";
    params[@"code"] = code;
    params[@"redirect_uri"] = @"https://www.baidu.com";
    
    // 3. 发送请求
    [requestManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        DJLog(@"success responseObject: %@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         DJLog(@"failure responseObject: %@",error);
    }];
    
    
    
    

}

 

posted @ 2016-10-26 20:37  夜行过客  阅读(873)  评论(0编辑  收藏  举报