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"];