简体   繁体   English

LinkedIn邀请API错误401 [未经授权] -iPhone sdk

[英]LinkedIn Invitation API error 401 [unauthorized]-iPhone sdk

I am using OAuth-Sample-Client code to send invitation from email address via Linked Invitation API. 我正在使用OAuth-Sample-Client代码通过Linked Invitation API从电子邮件地址发送邀请。 I have created the same body as described in developer site,but right now I am getting error of 401,I have searched a lot of on it but didn't get any solution which get me out of it from any site or forum. 我创建了与开发人员网站中描述的相同的主体,但是现在我收到401的错误,我已经搜索了很多内容,但没有得到任何解决方案,让我从任何网站或论坛中取出它。 My response is as below. 我的回答如下。

<?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>

Here my json string would be like this: 在这里,我的json字符串将是这样的:

{"body":"Say yes!","subject":"Invitation to connect.","recipients":{"values":[{"person":{"first-name":"test","last-name":"test","_path":"/people/email=test@test.com"}}]},"item-content":{"invitation-request":{"connect-type":"friend"}}} {“body”:“Say yes!”,“subject”:“邀请连接。”,“收件人”:{“值”:[{“person”:{“first-name”:“test”,“last” -name “:” 测试 “ ”_路径“: ”/ people/email=test@test.com“}}]}, ”项内容“:{ ”邀请请求“:{ ”连接型“:”朋友“}}}

I have used the code as below to send Invitation. 我使用下面的代码发送邀请。

- (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];
}

I got stuck at this point,Please get me out of this. 我在这一点上陷入困​​境,请让我离开这个。 -Thanks in advance -提前致谢

call prepare method of OADataFetcher manually. 手动调用OADataFetcher的准备方法。 Just put it before setting the body of the request. 只需在设置请求正文之前将其放入。

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

This is working for me. 这对我有用。 Also remove the prepare method from the OADataFetcher when you are working with Invitation API. 当您使用Invitation API时,也从OADataFetcher中删除prepare方法。

Apple's code works! Apple的代码有效! Just one more thing, dont forget any header. 还有一件事,不要忘记任何标题。 I was still getting the same message, turns out I forgot to add x-li-format and Content-type headers. 我仍然收到相同的消息,结果我忘了添加x-li-format和Content-type标头。

I got the solution from this Linkedin thread 我从这个Linkedin线程得到了解决方案

You just need to make a few changes in the code: 您只需要在代码中进行一些更改:

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];

and in oAdata OADataFetcher.m 并在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];
        
}
        

Try this. 试试这个。 Will work for sure. 肯定会工作的。 Hope this will help future visitors. 希望这将有助于未来的访客。

Regards 问候

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM