Ios Afnetworking-post json->;400错误请求
Im在ios应用程序中使用salesforce live agent rest api,试图请求聊天,但始终失败,请求不是有效的ChasitionInitIos Afnetworking-post json->;400错误请求,ios,objective-c,salesforce,afnetworking-3,Ios,Objective C,Salesforce,Afnetworking 3,Im在ios应用程序中使用salesforce live agent rest api,试图请求聊天,但始终失败,请求不是有效的ChasitionInit NSDictionary *parameters =@{ @"SessionId" :self.sessionId, @"OrganizationId" :ORG_ID, @"d
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);
}];
Im使用AFV3 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
}
我做错了什么?请纠正我 400错误请求意味着,您没有按照服务器期望的方式生成请求 检查服务器日志以了解问题所在 可能它需要另一种形式的数据 并尝试检查,您没有将null值传递给服务器 试一试:
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
{
}
我的应用程序中也出现了同样的错误。我通过删除请求和响应序列化程序来解决它。仅实例化管理器并使用参数调用post方法
reqManager = [AFHTTPRequestOperationManager manager];
[reqManager POST:URLString parameters:parameters progress:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];
感谢您的回复,我更新了问题请查看生成的jsonin参数将@“prechatDetails”:@{},替换为@“prechatDetails”:@[],更改后出现错误“字符0周围的值无效”。1)尝试将X-LIVEAGENT-AFFINITY值传递为null。这将防止会话过期。2) 如果您从联机文档示例复制了JSON,那么它是错误的。您可能希望使用JSON lint来双重检查您的JSON是否有效(我怀疑这很可能是您的问题所在)