Sample code for 30+ languages & platforms
PowerShell

palena.sii.cl getToken SOAP Request

See more SII Chile Examples

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

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$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...
$xmlToSign = New-Object Chilkat.Xml
$xmlToSign.Tag = "getToken"
# This is the seed obtained from palena.sii.cl getSeed
$xmlToSign.UpdateChildContent("item|Semilla","033878794660")

$gen = New-Object 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"

$gen.AddSameDocRef("","sha1","","","")

# Provide a certificate + private key. (PFX password is test123)
$cert = New-Object Chilkat.Cert
$success = $cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123")
if ($success -eq $false) {
    $($cert.LastErrorText)
    exit
}

$gen.SetX509Cert($cert,$true)

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

# Load XML to be signed...
$sbXml = New-Object Chilkat.StringBuilder
$xmlToSign.EmitXmlDecl = $false
$xmlToSign.GetXmlSb($sbXml)

$gen.Behaviors = "IndentedSignature"

# Sign the XML...
$success = $gen.CreateXmlDSigSb($sbXml)
if ($success -eq $false) {
    $($gen.LastErrorText)
    exit
}

# -----------------------------------------------

$http = New-Object Chilkat.Http

$http.UncommonOptions = "AllowEmptyHeaders"
$http.SetRequestHeader("SOAPAction","")

# The endpoint for this soap service is:
$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>

$xml = New-Object Chilkat.Xml
$xml.Tag = "soapenv:Envelope"
$xml.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")
$xml.AddAttribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema")
$xml.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
$xml.AddAttribute("xmlns:def","http://DefaultNamespace")
$xml.UpdateChildContent("soapenv:Header","")
$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.
$sbSoapXml = New-Object Chilkat.StringBuilder
$sbSoapXml.Append($xml.GetXml())
$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())

$xmlStr = $sbSoapXml.GetAsString()
$resp = New-Object Chilkat.HttpResponse
$success = $http.HttpStr("POST",$endPoint,$xmlStr,"utf-8","text/xml",$resp)
if ($success -eq $false) {
    $($http.LastErrorText)
    exit
}

$responseStatusCode = $resp.StatusCode

$("Response Status Code: " + $responseStatusCode)

# You may examine the exact HTTP header sent with the POST like this:
$("LastHeader:")
$($http.LastHeader)

# Examine the XML returned by the web service:
$("XML Response:")
$xmlResp = New-Object Chilkat.Xml
$xmlResp.LoadXml($resp.BodyStr)
$($xmlResp.GetXml())

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