Sample code for 30+ languages & platforms
Go

palena.sii.cl getToken SOAP Request

See more SII Chile Examples

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

Chilkat Go Downloads

Go
    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 := chilkat.NewXml()
    xmlToSign.SetTag("getToken")
    // This is the seed obtained from palena.sii.cl getSeed
    xmlToSign.UpdateChildContent("item|Semilla","033878794660")

    gen := chilkat.NewXmlDSigGen()

    gen.SetSigLocation("getToken")
    gen.SetSigLocationMod(0)
    gen.SetSigNamespacePrefix("")
    gen.SetSigNamespaceUri("http://www.w3.org/2000/09/xmldsig#")
    gen.SetSignedInfoCanonAlg("EXCL_C14N")
    gen.SetSignedInfoDigestMethod("sha1")

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

    // Provide a certificate + private key. (PFX password is test123)
    cert := chilkat.NewCert()
    success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123")
    if success == false {
        fmt.Println(cert.LastErrorText())
        xmlToSign.DisposeXml()
        gen.DisposeXmlDSigGen()
        cert.DisposeCert()
        return
    }

    gen.SetX509Cert(cert,true)

    gen.SetKeyInfoType("X509Data")
    gen.SetX509Type("Certificate")

    // Load XML to be signed...
    sbXml := chilkat.NewStringBuilder()
    xmlToSign.SetEmitXmlDecl(false)
    xmlToSign.GetXmlSb(sbXml)

    gen.SetBehaviors("IndentedSignature")

    // Sign the XML...
    success = gen.CreateXmlDSigSb(sbXml)
    if success == false {
        fmt.Println(gen.LastErrorText())
        xmlToSign.DisposeXml()
        gen.DisposeXmlDSigGen()
        cert.DisposeCert()
        sbXml.DisposeStringBuilder()
        return
    }

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

    http := chilkat.NewHttp()

    var responseStatusCode int

    http.SetUncommonOptions("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 := chilkat.NewXml()
    xml.SetTag("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 := chilkat.NewStringBuilder()
    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 := chilkat.NewHttpResponse()
    success = http.HttpStr("POST",endPoint,*xmlStr,"utf-8","text/xml",resp)
    if success == false {
        fmt.Println(http.LastErrorText())
        xmlToSign.DisposeXml()
        gen.DisposeXmlDSigGen()
        cert.DisposeCert()
        sbXml.DisposeStringBuilder()
        http.DisposeHttp()
        xml.DisposeXml()
        sbSoapXml.DisposeStringBuilder()
        resp.DisposeHttpResponse()
        return
    }

    responseStatusCode = resp.StatusCode()

    fmt.Println("Response Status Code: ", responseStatusCode)

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

    // Examine the XML returned by the web service:
    fmt.Println("XML Response:")
    xmlResp := chilkat.NewXml()
    xmlResp.LoadXml(resp.BodyStr())
    fmt.Println(*xmlResp.GetXml())

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

    xmlToSign.DisposeXml()
    gen.DisposeXmlDSigGen()
    cert.DisposeCert()
    sbXml.DisposeStringBuilder()
    http.DisposeHttp()
    xml.DisposeXml()
    sbSoapXml.DisposeStringBuilder()
    resp.DisposeHttpResponse()
    xmlResp.DisposeXml()