Sample code for 30+ languages & platforms
Tcl

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

Tcl

load ./chilkat.dll

set success 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.
# --------------------------------------------------------------------------------

set http [new_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> 
# 

set xml [new_CkXml]

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

set strXml [CkXml_getXml $xml]

CkHttp_SetRequestHeader $http "SOAPAction" "urn:getStatusCdr"

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

set resp [new_CkHttpResponse]

set success [CkHttp_HttpStr $http "POST" $endPoint $strXml "utf-8" "text/xml" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkXml $xml
    delete_CkHttpResponse $resp
    exit
}

set statusCode [CkHttpResponse_get_StatusCode $resp]
if {$statusCode != 200} then {
    puts "Non-success status code: $statusCode"
    puts "Response header: [CkHttpResponse_header $resp]"
    puts "Response body: [CkHttpResponse_bodyStr $resp]"
    puts "Unsuccessful."
    delete_CkHttp $http
    delete_CkXml $xml
    delete_CkHttpResponse $resp
    exit
}

set xmlResp [new_CkXml]

CkXml_LoadXml $xmlResp [CkHttpResponse_bodyStr $resp]

puts [CkXml_getXml $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...
set S_Envelope_xmlns_S [CkXml_getAttrValue $xml "xmlns:S"]
set ns0_getStatusResponse_xmlns_ns0 [CkXml_chilkatPath $xml "S:Body|ns0:getStatusResponse|(xmlns:ns0)"]
set statusCode [CkXml_GetChildIntValue $xml "S:Body|ns0:getStatusResponse|status|statusCode"]
set statusMessage [CkXml_getChildContent $xml "S:Body|ns0:getStatusResponse|status|statusMessage"]

delete_CkHttp $http
delete_CkXml $xml
delete_CkHttpResponse $resp
delete_CkXml $xmlResp