2017-04-14 1 views
0

Comment faire la requête XML SOAP dans AFNetworking 3.0 avec des champs Exemple de connexion. S'il vous plaît Aidez-moi dans ceComment faire la requête XML SOAP avec AFNetworking 3.0. Exemples de champs de connexion

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
[manager.requestSerializer setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"]; 
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"]; 
NSMutableDictionary *login_DictObject= [[NSMutableDictionary alloc]init]; 

[login_DictObject setObject:loginID.text forKey:@"YUNAME"]; 
[login_DictObject setObject:password.text forKey:@"YPWD"]; 

[manager POST:kLoginUrl_POST parameters:login_DictObject progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"success!"); 
    [MBProgressHUD hideHUDForView:self.view animated:YES]; 
    [self.navigationController setNavigationBarHidden:YES animated:nil]; 
    [self performSegueWithIdentifier:@"sideBarSegue" sender:nil]; 

} 
     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
      NSLog(@"error: %@", error); 
      [MBProgressHUD hideHUDForView:self.view animated:YES]; 

     }]; 
+1

est SO pas le code de service d'écriture , montrez ce que vous avez essayé, quel lien avez-vous visité jusqu'ici? –

+0

ADMIN admin123

+0

J'ai essayé une mauvaise façon, mais je dois savoir comment écrire. –

Répondre

0

J'ai utilisé quelque chose comme ça dans une de mes applications. Vous pouvez modifier les paramètres de la requête selon votre condition - Ecrire ci-dessous méthode dans une classe séparée je « HttpService »

+ (void)apiRequestWithParameterFromSessionManager:(NSMutableDictionary *)params 
            serviceName:(NSString *)serviceName 
            withSuccess:(void (^)(NSURLResponse *response, NSDictionary *responseDic))success 
            withFailure:(void (^)(NSURLResponse *response, NSError *error))failure { 
NSString *paramString = @""; 
for (id key in params) { 
    id value = [params objectForKey:key]; 
    NSLog(@"key->%@, value->%@",key, value); 
    paramString = [NSString stringWithFormat:@"%@<%@>%@</%@>", paramString, key, value, key]; 
} 

NSLog(@"paramDic->%@",params); 
NSString *soapInitialTags = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" 
          "<SOAP-ENV:Body>" 
          "<%@ xmlns=\"%@\">" 
          "<%@Request>" 
          "<WEBSERVICE>%@</WEBSERVICE>", serviceName, HOME_URL, serviceName, serviceName]; 

NSString *soapEndingTags = [NSString stringWithFormat:@"</%@Request>" 
          "</%@>" 
          "</SOAP-ENV:Body>" 
          "</SOAP-ENV:Envelope>", serviceName, serviceName]; 
NSString *soapMessage = [NSString stringWithFormat:@"%@%@%@", soapInitialTags, paramString, soapEndingTags]; 
NSLog(@"soap message->%@", soapMessage); 

NSURL *url = [NSURL URLWithString:BASE_URL]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPMethod:HTTP_TYPE_POST]; 
[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:[NSString stringWithFormat:@"%@%@", HOME_URL, serviceName] forHTTPHeaderField:@"SOAPAction"]; 
[request addValue:@"text/xml" forHTTPHeaderField:@"Accept"]; 
/** 
* Using AFHTTPSessionManager 
*/ 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
    NSLog(@"output :%@", response); 
    if (error) { 
     failure(response, error); 
    } 
    else { 
     NSError *error; 
     NSDictionary *responseXmlDic = [XMLReader dictionaryForXMLData:(NSData *)responseObject error:&error]; 
     NSDictionary *clearXML = [CommonFunctions extractXML:[[responseXmlDic mutableCopy] copy]]; 
     NSDictionary *responseDic = [[[[clearXML objectForKey:@"soap:Envelope"] objectForKey:@"soap:Body"] objectForKey:[NSString stringWithFormat:@"%@Response", serviceName]] objectForKey:[NSString stringWithFormat:@"%@Result", serviceName]]; 

     NSMutableDictionary *finalDic = [[NSMutableDictionary alloc] init]; 
     for (id key in responseDic) { 
      id value = [responseDic objectForKey:key]; 
      if ([value isKindOfClass:[NSString class]]) { 
       [finalDic setObject:(NSString *)value forKey:key]; 
      } 
      else { 
       [finalDic setObject:@"" forKey:key]; 
      } 
     } 
     NSLog(@"response->%@", responseDic); 
     success(response, finalDic); 
    } 
}]; 
[task resume]; 
} 

Appel méthode ci-dessus comme suit -

NSMutableDictionary *paramDic = [[NSMutableDictionary alloc] init]; 
    [paramDic setObject:loginModel.email.value forKey:@"EMAIL"]; 
    [paramDic setObject:loginModel.password.value forKey:@"PSSWORD"]; 


    [HttpService apiRequestWithParameterFromSessionManager:paramDic serviceName:LOGIN_SERVICE_NAME withSuccess:^(NSURLResponse *response, NSDictionary *responseDic) { 
     NSLog(@"response->%@", responseDic); 
     [APP_DELEGATE hideProgressBarIndicator]; 

    } 
    withFailure:^(NSURLResponse *response, NSError *error) { 

    }]; 
+0

Merci pour la réponse rapide krishna. Je vais travailler dessus. –