Sample code for 30+ languages & platforms
Dart

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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // 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.
  // --------------------------------------------------------------------------------

  final http = CkHttp();

  // <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> 
  // 

  final xml = CkXml();
  xml.tag = 'soapenv:Envelope';
  xml.addAttribute('xmlns:ser', 'http://service.sunat.gob.pe');
  xml.addAttribute('xmlns:soapenv', 'http://schemas.xmlsoap.org/soap/envelope/');
  xml.addAttribute('xmlns:wsse', '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', 'MY_USERNAME');
  xml.updateChildContent('soapenv:Header|wsse:Security|wsse:UsernameToken|wsse:Password', 'MY_PASSWORD');
  xml.updateChildContent('soapenv:Body|ser:getStatus|rucComprobante', '99999999999');
  xml.updateChildContent('soapenv:Body|ser:getStatus|tipoComprobante', '01');
  xml.updateChildContent('soapenv:Body|ser:getStatus|serieComprobante', 'F001');
  xml.updateChildContent('soapenv:Body|ser:getStatus|numeroComprobante', '55555');

  final strXml = xml.getXml();

  http.setRequestHeader('SOAPAction', 'urn:getStatusCdr');

  final endPoint = 'https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService';

  final resp = CkHttpResponse();
  try {
    http.httpStr('POST', endPoint, strXml, 'utf-8', 'text/xml', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  var statusCode = resp.statusCode;
  if (statusCode != 200) {
    print('Non-success status code: $statusCode');
    print('Response header: ${resp.header}');
    print('Response body: ${resp.bodyStr}');
    print('Unsuccessful.');
    return;
  }

  final xmlResp = CkXml();
  xmlResp.loadXml(resp.bodyStr);

  print(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...
  final sEnvelopeXmlnsS = xml.getAttrValue('xmlns:S');
  final ns0GetStatusResponseXmlnsNs0 = xml.chilkatPath('S:Body|ns0:getStatusResponse|(xmlns:ns0)');
  statusCode = xml.getChildIntValue('S:Body|ns0:getStatusResponse|status|statusCode');
  final statusMessage = xml.getChildContent('S:Body|ns0:getStatusResponse|status|statusMessage');
}