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