2016-06-10 1 views
1

Im en utilisant reste un agent en direct salesforce api dans l'application de ios, en essayant de demander le chat, mais toujours échouer avec 400 demande n'est pas un ChasitorInit valideAfnetworking - après JSON -> 400 mauvaise Demande

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 en utilisant Afnetworking v3 ios8 Le corps de la demande devrait être

{ 
"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 

}

Qu'est-im-je tort? Plz corrigez-moi !!

Répondre

1

400 Une mauvaise demande signifie que vous n'avez pas formulé la demande comme prévu par le serveur.

Vérifiez les journaux du serveur pour ce qui est de la question ...

Peut être qu'il a besoin de données sous une autre forme ..

et essayer de vérifier que vous ne passent pas la valeur null au serveur ..

Essayez comme ça:

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

merci pour votre réponse, je mis à jour la question s'il vous plaît voir le JSON généré – Gilber

+0

dans params ce qui est l'erreur après avoir remplacé @ "prechatDetails": @ {}, par @ "prechatDetails": @ [], –

+0

changé et maintenant obtenu une erreur "Valeur invalide autour du caractère 0." – Gilber

1

j'ai eu la même erreur dans mon application. Je le résoudre en supprimant la demande et la réponse Serializer. Instanciez seulement le gestionnaire et la méthode de post appelée avec le paramètre.

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

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

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