Sample code for 30+ languages & platforms
PureBasic

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

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

    ; 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.
    ; --------------------------------------------------------------------------------

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

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

    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::setCkTag(xml, "soapenv:Envelope")
    CkXml::ckAddAttribute(xml,"xmlns:ser","http://service.sunat.gob.pe")
    CkXml::ckAddAttribute(xml,"xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
    CkXml::ckAddAttribute(xml,"xmlns:wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
    CkXml::ckUpdateChildContent(xml,"soapenv:Header|wsse:Security|wsse:UsernameToken|wsse:Username","MY_USERNAME")
    CkXml::ckUpdateChildContent(xml,"soapenv:Header|wsse:Security|wsse:UsernameToken|wsse:Password","MY_PASSWORD")
    CkXml::ckUpdateChildContent(xml,"soapenv:Body|ser:getStatus|rucComprobante","99999999999")
    CkXml::ckUpdateChildContent(xml,"soapenv:Body|ser:getStatus|tipoComprobante","01")
    CkXml::ckUpdateChildContent(xml,"soapenv:Body|ser:getStatus|serieComprobante","F001")
    CkXml::ckUpdateChildContent(xml,"soapenv:Body|ser:getStatus|numeroComprobante","55555")

    strXml.s = CkXml::ckGetXml(xml)

    CkHttp::ckSetRequestHeader(http,"SOAPAction","urn:getStatusCdr")

    endPoint.s = "https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService"

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpStr(http,"POST",endPoint,strXml,"utf-8","text/xml",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkXml::ckDispose(xml)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    statusCode.i = CkHttpResponse::ckStatusCode(resp)
    If statusCode <> 200
        Debug "Non-success status code: " + Str(statusCode)
        Debug "Response header: " + CkHttpResponse::ckHeader(resp)
        Debug "Response body: " + CkHttpResponse::ckBodyStr(resp)
        Debug "Unsuccessful."
        CkHttp::ckDispose(http)
        CkXml::ckDispose(xml)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    xmlResp.i = CkXml::ckCreate()
    If xmlResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadXml(xmlResp,CkHttpResponse::ckBodyStr(resp))

    Debug CkXml::ckGetXml(xmlResp)

    ; 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...
    S_Envelope_xmlns_S.s = CkXml::ckGetAttrValue(xml,"xmlns:S")
    ns0_getStatusResponse_xmlns_ns0.s = CkXml::ckChilkatPath(xml,"S:Body|ns0:getStatusResponse|(xmlns:ns0)")
    statusCode = CkXml::ckGetChildIntValue(xml,"S:Body|ns0:getStatusResponse|status|statusCode")
    statusMessage.s = CkXml::ckGetChildContent(xml,"S:Body|ns0:getStatusResponse|status|statusMessage")


    CkHttp::ckDispose(http)
    CkXml::ckDispose(xml)
    CkHttpResponse::ckDispose(resp)
    CkXml::ckDispose(xmlResp)


    ProcedureReturn
EndProcedure