【发布时间】:2014-06-11 23:18:50
【问题描述】:
我正在使用与 iOS 兼容的 OAuthConsumer 库版本,并尝试针对 Splitwise 的 API 进行身份验证。获取 requestToken 和验证者后,我请求一个 accessToken,如下所示:
- (void)getAuthorizedAccessToken:(NSString *)pin {
NSURL *url = [NSURL URLWithString:@"https://secure.splitwise.com/api/v3.0/get_access_token"];
OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url
consumer:self.consumer
token:self.accessToken
realm:nil
signatureProvider:nil];
OARequestParameter *token = [[OARequestParameter alloc] initWithName:@"oauth_token" value:self.accessToken.key];
OARequestParameter *verifier = [[OARequestParameter alloc] initWithName:@"oauth_secret" value:pin];
[request setParameters:@[token, verifier]];
[request setHTTPMethod:@"POST"];
OADataFetcher *fetcher = [[OADataFetcher alloc] init];
[fetcher fetchDataWithRequest:request
delegate:self
didFinishSelector:@selector(accessTokenTicket:didFinishWithData:)
didFailSelector:@selector(accessTokenTicket:didFailWithError:)];
NSLog(@"Sent access-token OAuth request");
}
但是当我的 didFinishWithData 函数返回时,我得到的只是一个错误:“无效的 OAuth 请求”,而我希望这会成功。
- (void)accessTokenTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
NSLog(@"accessTokenTicket didFinishWithData");
if (ticket.didSucceed) {
NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
self.accessToken = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
[self.accessToken storeInUserDefaultsWithServiceProviderName:@"WhoPays" prefix:@"WP"];
[self testAPIConnection];
} else {
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
}
我已经将我的代码与这个工作版本与 Twitter 进行了比较,我认为我的逻辑似乎是有序的: https://code.google.com/p/oauthconsumer-iphone/source/browse/trunk/examples/oauthTwitterApp/Classes/oauthTwitterAppViewController.m
我的整个代码可以在这里找到: https://github.com/crummy/whopays/blob/master/WhoPays%3F/WPWelcomeViewController.m
【问题讨论】: