Sample code for 30+ languages & platforms
Objective-C

SOAP e-factura.sunat.gob.pe getStatusCdr

See more HTTP Misc Examples

Make a SOAP call to https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService

Chilkat Objective-C Downloads

Objective-C
#import <CkoHttp.h>
#import <CkoXml.h>
#import <NSString.h>
#import <CkoHttpResponse.h>

BOOL success = NO;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

//  --------------------------------------------------------------------------------
//  Also see Chilkat's Online WSDL Code Generator
//  to generate code and SOAP Request and Response XML for each operation in a WSDL.
//  --------------------------------------------------------------------------------

CkoHttp *http = [[CkoHttp alloc] init];

//  <soapenv:Envelope xmlns:ser="http://service.sunat.gob.pe"
//    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
//    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
//   <soapenv:Header>
//    <wsse:Security>        
//     <wsse:UsernameToken>          
//      <wsse:Username>MY_USERNAME</wsse:Username>
//      <wsse:Password>MY_PASSWORD</wsse:Password>
//     </wsse:UsernameToken>      
//    </wsse:Security>
//   </soapenv:Header>
//   <soapenv:Body>
//    <ser:getStatus>
//     <rucComprobante>99999999999</rucComprobante>
//     <tipoComprobante>01</tipoComprobante>
//     <serieComprobante>F001</serieComprobante>
//     <numeroComprobante>55555</numeroComprobante>
//    </ser:getStatus>
//   </soapenv:Body>
//   </soapenv:Envelope> 
//  

CkoXml *xml = [[CkoXml alloc] init];
xml.Tag = @"soapenv:Envelope";
[xml AddAttribute: @"xmlns:ser" value: @"http://service.sunat.gob.pe"];
[xml AddAttribute: @"xmlns:soapenv" value: @"http://schemas.xmlsoap.org/soap/envelope/"];
[xml AddAttribute: @"xmlns:wsse" value: @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"];
[xml UpdateChildContent: @"soapenv:Header|wsse:Security|wsse:UsernameToken|wsse:Username" value: @"MY_USERNAME"];
[xml UpdateChildContent: @"soapenv:Header|wsse:Security|wsse:UsernameToken|wsse:Password" value: @"MY_PASSWORD"];
[xml UpdateChildContent: @"soapenv:Body|ser:getStatus|rucComprobante" value: @"99999999999"];
[xml UpdateChildContent: @"soapenv:Body|ser:getStatus|tipoComprobante" value: @"01"];
[xml UpdateChildContent: @"soapenv:Body|ser:getStatus|serieComprobante" value: @"F001"];
[xml UpdateChildContent: @"soapenv:Body|ser:getStatus|numeroComprobante" value: @"55555"];

NSString *strXml = [xml GetXml];

[http SetRequestHeader: @"SOAPAction" value: @"urn:getStatusCdr"];

NSString *endPoint = @"https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService";

CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpStr: @"POST" url: endPoint bodyStr: strXml charset: @"utf-8" contentType: @"text/xml" response: resp];
if (success == NO) {
    NSLog(@"%@",http.LastErrorText);
    return;
}

int statusCode = [resp.StatusCode intValue];
if (statusCode != 200) {
    NSLog(@"%@%d",@"Non-success status code: ",statusCode);
    NSLog(@"%@%@",@"Response header: ",resp.Header);
    NSLog(@"%@%@",@"Response body: ",resp.BodyStr);
    NSLog(@"%@",@"Unsuccessful.");
    return;
}

CkoXml *xmlResp = [[CkoXml alloc] init];
[xmlResp LoadXml: resp.BodyStr];

NSLog(@"%@",[xmlResp GetXml]);

//  A sample response:

//  <?xml version="1.0" encoding="UTF-8"?>
//  <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
//      <S:Body>
//          <ns0:getStatusResponse xmlns:ns0="http://service.sunat.gob.pe">
//              <status>
//                  <statusCode>0001</statusCode>
//                  <statusMessage>El comprobante existe y est� aceptado.</statusMessage>
//              </status>
//          </ns0:getStatusResponse>
//      </S:Body>
//  </S:Envelope>
//  

//  Parse the response...
NSString *S_Envelope_xmlns_S = [xml GetAttrValue: @"xmlns:S"];
NSString *ns0_getStatusResponse_xmlns_ns0 = [xml ChilkatPath: @"S:Body|ns0:getStatusResponse|(xmlns:ns0)"];
statusCode = [[xml GetChildIntValue: @"S:Body|ns0:getStatusResponse|status|statusCode"] intValue];
NSString *statusMessage = [xml GetChildContent: @"S:Body|ns0:getStatusResponse|status|statusMessage"];