Sample code for 30+ languages & platforms
Xojo Plugin

palena.sii.cl getToken SOAP Request

See more SII Chile Examples

Demonstrates how to call getToken SOAP request at palena.sii.cl

Chilkat Xojo Plugin Downloads

Xojo Plugin
Dim success As Boolean
success = False

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

// Create the XML to be signed...
Dim xmlToSign As New Chilkat.Xml
xmlToSign.Tag = "getToken"
// This is the seed obtained from palena.sii.cl getSeed
xmlToSign.UpdateChildContent "item|Semilla","033878794660"

Dim gen As New Chilkat.XmlDSigGen

gen.SigLocation = "getToken"
gen.SigLocationMod = 0
gen.SigNamespacePrefix = ""
gen.SigNamespaceUri = "http://www.w3.org/2000/09/xmldsig#"
gen.SignedInfoCanonAlg = "EXCL_C14N"
gen.SignedInfoDigestMethod = "sha1"

success = gen.AddSameDocRef("","sha1","","","")

// Provide a certificate + private key. (PFX password is test123)
Dim cert As New Chilkat.Cert
success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123")
If (success = False) Then
    System.DebugLog(cert.LastErrorText)
    Return
End If

success = gen.SetX509Cert(cert,True)

gen.KeyInfoType = "X509Data"
gen.X509Type = "Certificate"

// Load XML to be signed...
Dim sbXml As New Chilkat.StringBuilder
xmlToSign.EmitXmlDecl = False
success = xmlToSign.GetXmlSb(sbXml)

gen.Behaviors = "IndentedSignature"

// Sign the XML...
success = gen.CreateXmlDSigSb(sbXml)
If (success = False) Then
    System.DebugLog(gen.LastErrorText)
    Return
End If

// -----------------------------------------------

Dim http As New Chilkat.Http

Dim responseStatusCode As Int32

http.UncommonOptions = "AllowEmptyHeaders"
http.SetRequestHeader "SOAPAction",""

// The endpoint for this soap service is:
Dim endPoint As String
endPoint = "https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws"

// Send the following SOAP XML

// <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:def="http://DefaultNamespace">
//    <soapenv:Header/>
//    <soapenv:Body>
//       <def:getToken soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
//          <pszXml>SIGNED_XML_GOES_HERE</pszXml>
//       </def:getToken>
//    </soapenv:Body>
// </soapenv:Envelope>

Dim xml As New Chilkat.Xml
xml.Tag = "soapenv:Envelope"
success = xml.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")
success = xml.AddAttribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema")
success = xml.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
success = xml.AddAttribute("xmlns:def","http://DefaultNamespace")
xml.UpdateChildContent "soapenv:Header",""
success = xml.UpdateAttrAt("soapenv:Body|def:getToken",True,"soapenv:encodingStyle","http://schemas.xmlsoap.org/soap/encoding/")
xml.UpdateChildContent "soapenv:Body|def:getToken|pszXml","SIGNED_XML_GOES_HERE"

// We must replace the "SIGNED_XML_GOES_HERE" with the exact contents of the signed XML to ensure the signed XML is not modified in any way.
Dim sbSoapXml As New Chilkat.StringBuilder
success = sbSoapXml.Append(xml.GetXml())
Dim numReplaced As Int32
numReplaced = sbXml.Replace("&","&amp;")
numReplaced = sbXml.Replace(">","&gt;")
numReplaced = sbXml.Replace("<","&lt;")
numReplaced = sbXml.Replace("""","&quot;")
numReplaced = sbSoapXml.Replace("SIGNED_XML_GOES_HERE",sbXml.GetAsString())

Dim xmlStr As String
xmlStr = sbSoapXml.GetAsString()
Dim resp As New Chilkat.HttpResponse
success = http.HttpStr("POST",endPoint,xmlStr,"utf-8","text/xml",resp)
If (success = False) Then
    System.DebugLog(http.LastErrorText)
    Return
End If

responseStatusCode = resp.StatusCode

System.DebugLog("Response Status Code: " + Str(responseStatusCode))

// You may examine the exact HTTP header sent with the POST like this:
System.DebugLog("LastHeader:")
System.DebugLog(http.LastHeader)

// Examine the XML returned by the web service:
System.DebugLog("XML Response:")
Dim xmlResp As New Chilkat.Xml
success = xmlResp.LoadXml(resp.BodyStr)
System.DebugLog(xmlResp.GetXml())

// Use this online tool to generate parsing code from response XML: 
// Generate Parsing Code from XML