我在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
}
我做错了什么? Plz纠正我!!
答案 0 :(得分:1)
400错误的请求意味着,您没有像服务器期望的那样形成请求。
检查服务器日志中是否有问题...
可能需要另一种形式的数据..
并尝试检查,您没有将空值传递给服务器..
尝试这样:
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
{
}
答案 1 :(得分: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);
}];