1

我在 ios 应用程序中使用 salesforce live agent rest api,尝试请求聊天但总是以 400 请求失败,这不是有效的 ChasitorInit

NSDictionary *parameters =@{     @"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);
      }];

我正在使用 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

}

我做错了什么?请纠正我!

4

2 回答 2

1

400 Bad request 意味着,您没有按照服务器期望的方式形成请求。

检查服务器日志以了解问题所在...

可能它需要另一种形式的数据..

并尝试检查,您没有将空值传递给服务器..

试试这样:

 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

{


}
于 2016-06-11T04:54:27.097 回答
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);
      }];
于 2017-06-29T14:13:50.617 回答