2016-06-10 19 views
1

Im Salesforce Live-Agenten Rest api in ios app, versuchen Chat zu beantragen, aber immer mit 400 Anforderung fehl keine gültige ChasitorInit istAfnetworking - Post json -> 400 Bad Request

NSDictionary *parameters [email protected]{  @"SessionId"   :self.sessionId, 
           @"OrganizationId"  :ORG_ID, 
           @"deploymentId"  :DEPLOYEMENT_ID, 
           @"buttonId"   :BUTTON_ID, 
           @"userAgent"   :USER_AGENT, 
           @"language"   :LANG, 
           @"screenResolution" :SCREEN_RES, 
           @"visitorName"  :@"Test Visitor", 
           @"prechatDetails"  :@[], 
           @"prechatEntities" :@[], 
           @"receiveQueueUpdates":@"true", 
           @"isPost"    :@"true" 
          }; 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer]; 
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
manager.requestSerializer = serializer; 

[manager.requestSerializer setValue:self.sessionKey forHTTPHeaderField:X_LIVEAGENT_SESSION_KEY]; 
[manager.requestSerializer setValue:@"null" forHTTPHeaderField:X_LIVEAGENT_AFFINITY]; 
[manager.requestSerializer setValue:@"1" forHTTPHeaderField:X_LIVEAGENT_SEQUENCE]; 
[manager.requestSerializer setValue:API_V forHTTPHeaderField:X_LIVEAGENT_API_VERSION]; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager POST:ChasitorInit_path parameters:parameters progress:nil 
     success:^(NSURLSessionDataTask *task, id responseObject) { 
      NSError* error; 
      NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject 
                   options:kNilOptions 
                   error:&error]; 
     } failure:^(NSURLSessionDataTask *task, NSError *error) { 

      NSLog(@"Error: %@", error); 
     }]; 

Im mit Afnetworking v3 ios8 Der Antrag Körper sollte

{ 
"sessionId": "8f1cfb18-fbd1-4487-90d-e98c0a84e165", 
"organizationId": "00D58000000OwMB", 
"deploymentId": "57258000000L1mj", 
"buttonId": "57358000000L24F", 

"userAgent": "", 
"language": "en-US", 
"screenResolution": "1900x1080", 
"visitorName": "Test Visitor", 
"prechatDetails": [], 
"prechatEntities": [], 
"receiveQueueUpdates": true, 
"isPost": true 

}

sein, was im i falsch? Plz korrigiere mich !!

Antwort

1

400 Schlechte Anforderung bedeutet, dass Sie die Anforderung nicht so formuliert haben, wie der Server erwartet.

Überprüfen Sie die Serverprotokolle auf, was ist das Problem ...

sein kann es Daten in einer anderen Form benötigt ..

und versuchen, das zu überprüfen, Sie sind nicht null-Wert Server vorbei ..

Versuchen wie folgt aus:

NSString *Loginurl = [NSString stringWithFormat:@"http://Enter your URL Here"]; 

    NSDictionary *params = @{  @"SessionId"   :self.sessionId, 
           @"OrganizationId"  :ORG_ID, 
           @"deploymentId"  :DEPLOYEMENT_ID, 
           @"buttonId"   :BUTTON_ID, 
           @"userAgent"   :USER_AGENT, 
           @"language"   :LANG, 
           @"screenResolution" :SCREEN_RES, 
           @"visitorName"  :@"Test Visitor", 
           @"prechatDetails"  :@{}, 
           @"prechatEntities" :@{}, 
           @"receiveQueueUpdates":@"true", 
           @"isPost"    :@"true" 
          }; 

    NSLog(@"Sent parameter to server : %@",params); 

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 



    manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 


    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 


    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil]; 

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",nil]; 

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/plain",nil]; 

[manager.requestSerializer setValue:self.sessionKey forHTTPHeaderField:X_LIVEAGENT_SESSION_KEY]; 
[manager.requestSerializer setValue:@"null" forHTTPHeaderField:X_LIVEAGENT_AFFINITY]; 
[manager.requestSerializer setValue:@"1" forHTTPHeaderField:X_LIVEAGENT_SEQUENCE]; 
[manager.requestSerializer setValue:API_V forHTTPHeaderField:X_LIVEAGENT_API_VERSION]; 

      AFSecurityPolicy* policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; 

    [policy setValidatesDomainName:NO]; 

    [policy setAllowInvalidCertificates:YES]; 



    [manager POST:Loginurl parameters:params progress:nil success:^(NSURLSessionTask *task, id responseObject) { 

     NSLog(@"Response from server : %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); 



     _str=[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 


     NSLog(@"%@",_str); 


     [self getdata:responseObject]; 



    } failure:^(NSURLSessionTask *operation, NSError *error) 

    { 

     NSLog(@"Error: %@", error); 
    }];  
} 

#pragma mark-DataFromServer 

-(void)getdata:(NSDictionary*)RegisterData 

{ 


} 
+0

Dank für Ihre Antwort danken, aktualisiert ich die Frage bitte die erzeugte json – Gilber

+0

in params sehen, was nach dem Austausch der Fehler ist @ "prechatDetails": @ {} durch @ "prechatDetails": @ [], –

+0

geändert und jetzt Fehler "Ungültiger Wert um Zeichen 0" erhalten – Gilber

1

habe ich den gleichen Fehler in meiner Anwendung. Ich löse es, indem ich Request und Response-Serializer entferne. Nur Manager instanziieren und post-Methode mit Parameter aufrufen.

reqManager = [AFHTTPRequestOperationManager manager]; 
[reqManager POST:URLString parameters:parameters progress:nil 
     success:^(NSURLSessionDataTask *task, id responseObject) { 

     } failure:^(NSURLSessionDataTask *task, NSError *error) { 

      NSLog(@"Error: %@", error); 
     }]; 
Verwandte Themen