LinkedIn邀请API错误401 -iPhone sdk

我正在使用OAuth-Sample-Client代码通过链接邀请API从电子邮件地址发送邀请。 我已经创build了开发人员网站中描述的相同的机构,但现在我得到了401的错误,我已经search了很多,但没有得到任何解决scheme,让我从任何网站或论坛。 我的回应如下。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <error> <status>401</status> <timestamp>1351159386437</timestamp> <request-id>YX4NRU3S7J</request-id> <error-code>0</error-code> <message>[unauthorized]. OAU:ron8e8nko3te|e0a96317-dfdc-44fb-b427-5655e02f97ed|*01|*01:1351159294:dRCDN6b3K9F/mwWAaByKZQPgeVw=</message> </error> 

在这里,我的JSONstring将是这样的:

{“body”:“说是!”,“subject”:“邀请连接”,“recipients”:{“values”:[{“person”:{“first-name”:“test”,“last -name “:” testing “ ”_path“: ”/ people/email=test@test.com“}}]}, ”项内容“:{ ”邀请请求“:{ ”连接型“:”朋友”}}}

我已经使用下面的代码发送邀请。

 - (IBAction)postButton_TouchUp:(UIButton *)sender { [statusTextView resignFirstResponder]; NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~/mailbox"]; OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url consumer:oAuthLoginView.consumer token:oAuthLoginView.accessToken callback:nil signatureProvider:[[OAHMAC_SHA1SignatureProvider alloc] init]]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; NSDictionary *temp=[[NSDictionary alloc]initWithObjectsAndKeys:@"/people/email=test@test.com",@"_path",@"test",@"first-name",@"test",@"last-name", nil]; NSDictionary *temp2=[[NSDictionary alloc] initWithObjectsAndKeys:temp,@"person",nil]; NSArray *arr2=[[NSArray alloc]initWithObjects:temp2, nil]; NSDictionary *value=[[NSDictionary alloc]initWithObjectsAndKeys:arr2,@"values", nil]; NSDictionary *dict3=[[NSDictionary alloc]initWithObjectsAndKeys:@"friend",@"connect-type",nil]; NSDictionary *dict4=[[NSDictionary alloc] initWithObjectsAndKeys:dict3,@"invitation-request", nil]; NSDictionary *dict=[[NSDictionary alloc]initWithObjectsAndKeys:dict4,@"item-content",@"Say yes!",@"body",@"Invitation to connect.",@"subject",value,@"recipients", nil]; NSLog(@"%@",[dict description]); NSString *updateString = [dict JSONString]; [request setHTTPBodyWithString:updateString]; [request setHTTPMethod:@"POST"]; OADataFetcher *fetcher = [[OADataFetcher alloc] init]; [fetcher fetchDataWithRequest:request delegate:self didFinishSelector:@selector(postUpdateApiCallResult:didFinish:) didFailSelector:@selector(postUpdateApiCallResult:didFail:)]; [request release]; } 

我被困在这一点,请把我从这个。 -提前致谢

手动调用OADataFetcher的准备方法。 只需在设置请求的主体之前进行设置即可。

 [request prepare]; [request setHTTPBodyWithString:updateString]; 

这是为我工作。 在使用邀请API时,还要从OADataFetcher中删除准备方法。

苹果的代码工作! 还有一件事,不要忘记任何标题。 我仍然收到相同的消息,事实certificate,我忘了添加x-li格式和Content-type标头。

我从这个Linkedin主题获得了解决scheme

你只需要在代码中进行一些更改:

 NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~/mailbox"]; OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url consumer:oAuthLoginView.consumer token:oAuthLoginView.accessToken callback:nil signatureProvider:nil]; [request setHTTPMethod:@"POST"]; NSString *messageToPerson = @"/people/email=target@gmail.com"; NSDictionary *person = [[NSDictionary alloc] initWithObjectsAndKeys:[[[NSDictionary alloc] initWithObjectsAndKeys:messageToPerson,@"_path",@"TargetFirstName",@"first-name",@"TargetSecondName",@"last-name",nil] autorelease], @"person",nil]; NSArray *valueArray = [[NSArray alloc] initWithObjects:person,nil]; NSDictionary *values = [[NSDictionary alloc] initWithObjectsAndKeys:valueArray,@"values", nil]; NSDictionary *ir = [[NSDictionary alloc] initWithObjectsAndKeys:[[[NSDictionary alloc] initWithObjectsAndKeys:@"friend",@"connect-type",nil] autorelease], @"invitation-request",nil]; NSDictionary *ic = [[NSDictionary alloc] initWithObjectsAndKeys:ir,@"item-content", nil]; NSDictionary *update = [[NSDictionary alloc] initWithObjectsAndKeys:values,@"recipients",@"Invitation",@"subject",@"ConnectWithMe",@"body", ir, @"item-content", nil]; [request setValue:@"json" forHTTPHeaderField:@"x-li-format"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; NSLog(@"%@",[update description]); NSString *updateString = [update JSONString]; [request prepare]; [request setHTTPBodyWithString:updateString]; OADataFetcher *fetcher = [[OADataFetcher alloc] init]; [fetcher fetchDataWithRequest:request delegate:self didFinishSelector:@selector(postUpdateApiCallResult:didFinish:) didFailSelector:@selector(postUpdateApiCallResult:didFail:) withId:1]; [request release]; 

oAdata OADataFetcher.m

 - (void)fetchDataWithRequest:(OAMutableURLRequest *)aRequest delegate:(id)aDelegate didFinishSelector:(SEL)finishSelector didFailSelector:(SEL)failSelector withId:(int)idtm { [request release]; request = [aRequest retain]; delegate = aDelegate; didFinishSelector = finishSelector; didFailSelector = failSelector; //note this change if (idtm!=1) { [request prepare]; } connection = [[NSURLConnection alloc] initWithRequest:aRequest delegate:self]; } 

尝试这个。 肯定会工作。 希望这将有助于未来的游客。

问候