2016-06-10 3 views
1

Im используя Salesforce живой агент REST API в ИО приложение, пытается запросить чат, но всегда терпит неудачу с 400 запроса не является допустимым ChasitorInitAfnetworking - после 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 используя Afnetworking v3 ios8 тело запроса должно быть

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

}

Что им я делаю неправильно? Plz исправьте меня !!

ответ

1

400 Плохой запрос означает, что вы не сформировали запрос, который ожидает сервер.

Проверьте сервер журналы для Whats вопрос ...

Может быть, необходимы данные в другой форме ..

и попытаться проверить, что вы не передавая нулевое значение на сервер ..

Попробуйте так:

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

спасибо за ваш ответ, я обновил вопрос см сгенерированного JSON – Gilber

+0

в Params то, что ошибка после замены @ "prechatDetails": @ {}, на @ "prechatDetails": @ [], –

+0

изменен и теперь появилась ошибка «Недопустимое значение вокруг символа 0.» – Gilber

1

Я получил ту же ошибку в моем приложении. Я разрешаю его, удаляя запрос и ответ Сериализатор. Создавайте экземпляр менеджера и вызывайте метод post с параметром.

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

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

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