Sample code for 30+ languages & platforms
Node.js

SII POST boleta.electronica.token

See more SII Chile Examples

Obtener un token de at autenticación para el envío y consultas automatizadas de boletas electrónicas.

Chilkat Node.js Downloads

Node.js
NODEJS_PRELUDE

function chilkatExample() {

    var success = false;

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

    // Create the XML to be signed...
    // The following XML is created:
    // 
    //   <?xml version="1.0" encoding="UTF-8"?>
    //   <getToken><item><Semilla>030530912644</Semilla></item></getToken>
    // 
    var xmlToSign = new chilkat.Xml();
    xmlToSign.Tag = "getToken";
    xmlToSign.UpdateChildContent("item|Semilla","030530912644");

    // Sign the XML.
    // 
    // We wish to create the following signed XML:

    //   <?xml version="1.0" encoding="UTF-8"?>
    //   <getToken>
    //   	<item>
    //   		<Semilla>030530912644</Semilla>
    //   	</item>
    //   	<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    //   		<SignedInfo>
    //   			<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
    //   			</CanonicalizationMethod>
    //   			<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1">
    //   			</SignatureMethod>
    //   			<Reference URI="">
    //   				<Transforms>
    //   					<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature">
    //   					</Transform>
    //   				</Transforms>
    //   				<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1">
    //   				</DigestMethod>
    //   				<DigestValue>l2s9BqLppHaWo+w1Al1J5SsYScs=</DigestValue>
    //   			</Reference>
    //   		</SignedInfo>
    //   		<SignatureValue>jlbzatIIBLW8AjH++5uVTTrGIMVwGButuoAR88y/hvSc1+6/eW1K864fK3cKi76oArqk7lAM4pP okoXme0JT/hRXXGo6ecuKzO18z2WfPWwgnN0f3ac03TDu7PwfqiDG9mhQpYfIkNp6GNJIiqlg9PG2w1fOJ1QoypsrQmKq6 YU=</SignatureValue>
    //   		<KeyInfo>
    //   			<KeyValue>
    //   				<RSAKeyValue>
    //   					<Modulus>2Pb4kEB19m7NmOUYew9f36325yrTLTPMU7qzYG2A0/BsubxDdgQw2Op0x6zXvOVX sYI9KkPXtD5orKJMjwxYRv9wUWdyiE776Rv4ljfJO7EQhIK1fDQDnPt0HefBS06Xzg2QLBvLR+pe1vc6C02Dr99v+lnLA8 mnZiJlRHndhNU=</Modulus>
    //   					<Exponent>AQAB</Exponent>
    //   				</RSAKeyValue>
    //   			</KeyValue>
    //   			<X509Data>
    //   				<X509Certificate>MIIF1DCCBLygAwIBAgIDAQNtMA0GCSqGSIb3DQEBBQUAMIHGMQswCQYDVQQG
    //   EwJDTDEYMBYGA1UEChMPQWNlcHRhLmNvbSBTLkEuMTgwNgYDVQQLEy9BdXRv
    //   cmlkYWQgY2VydGlmaWNhZG9yYSBDbGFzZSAzIHBlcnNvbmEgbmF0dXJhbDFD
    //   MEEGA1UEAxM6QWNlcHRhLmNvbSBBdXRvcmlkYWQgY2VydGlmaWNhZG9yYSBD
    //   bGFzZSAzIHBlcnNvbmEgbmF0dXJhbDEeMBwGCSqGSIb3DQEJARYPaW5mb0Bh
    //   Y2VwdGEuY29tMB4XDTAxMDkyNTIxMDgxMloXDTAyMDkyNTIxMDgxMlowgZ8x
    //   CzAJBgNVBAYTAkNMMRgwFgYDVQQKEw9BY2VwdGEuY29tIFMuQS4xLDAqBgNV
    //   BAsTI0NlcnRpZmljYWRvIENsYXNlIDMgUGVyc29uYSBOYXR1cmFsMRwwGgYJ
    //   KoZIhvcNAQkBFg1uY2hlbGVAc2lpLmNsMSowKAYDVQQDEyFOSUNPTEFTIFpB
    //   UFJJQU4gQ0hFTEVCSUZTS0kgQkFFWkEwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
    //   MIGJAoGBANj2+JBAdfZuzZjlGHsPX9+t9ucq0y0zzFO6s2BtgNPwbLm8Q3YE
    //   MNjqdMes17zlV7GCPSpD17Q+aKyiTI8MWEb/cFFncohO++kb+JY3yTuxEISC
    //   tXw0A5z7dB3nwUtOl84NkCwby0fqXtb3OgtNg6/fb/pZywPJp2YiZUR53YTV
    //   AgMBAAGjggJyMIICbjAdBggrBgEEAbVrDwQRFg9BY2VwdGEuY29tIFMuQS4w
    //   JQYDVR0RBB4wHKAaBggrBgEEAcEBAaAOFgwxMC40MTEuODcxLTIwDwYIKwYB
    //   Jh0z1DR3Pl3xOiaFIjSXsQO2PSzcA3wZXYF+KDrMul8e5lAF2NNiLmMVtXEx
    //   ZykMaTGGWS0ZETDhJmBwEZGpP4+lt/JhgwF1Sb6wdrXp7MFCJUc1Tj+/5JqH
    //   1kP0E63/hVElrcP0g8Zn8Z+vr/PMGW1kKgE0IyS4iJ8eIhNSK5phFyKJUn0l
    //   BmIZX7u89d5u7X8=
    //   </X509Certificate>
    //   			</X509Data>
    //   		</KeyInfo>
    //   	</Signature>
    //   </getToken>

    var gen = new chilkat.XmlDSigGen();

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

    // -------- Reference 1 --------
    gen.AddSameDocRef("","sha1","","","");

    // Provide a certificate + private key. (PFX password is test123)
    var cert = new chilkat.Cert();
    success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123");
    if (success == false) {
        console.log(cert.LastErrorText);
        return;
    }

    gen.SetX509Cert(cert,true);

    gen.KeyInfoType = "X509Data+KeyValue";
    gen.X509Type = "Certificate";

    // Load XML to be signed...
    var sbXml = new chilkat.StringBuilder();
    xmlToSign.GetXmlSb(sbXml);

    gen.Behaviors = "IndentedSignature";

    // Sign the XML...
    success = gen.CreateXmlDSigSb(sbXml);
    if (success == false) {
        console.log(gen.LastErrorText);
        return;
    }

    console.log(sbXml.GetAsString());

    // Send the POST with signed XML in the request body
    var http = new chilkat.Http();

    http.SetRequestHeader("accept","application/xml");

    // Use one of the following domains, depending on the environment:
    // apicert.sii.cl  - Certification Environment
    // api.sii.cl      - Production Environment
    var url = "https://apicert.sii.cl/recursos/v1/boleta.electronica.token";
    var resp = new chilkat.HttpResponse();
    success = http.HttpSb("POST",url,sbXml,"utf-8","application/xml",resp);
    if (success == false) {
        console.log(http.LastErrorText);
        return;
    }

    // Examine the response status code:
    console.log("response status code = " + resp.StatusCode);

    // Examine the response body:
    console.log("response body: " + resp.BodyStr);

    // We expect a response like this:
    //   <?xml version="1.0" encoding="UTF-8"?>
    //   <SII:RESPUESTA xmlns:SII="http://www.sii.cl/XMLSchema">
    //   	<SII:RESP_HDR>
    //   		<ESTADO>00</ESTADO>
    //   		<GLOSA>Token Creado</GLOSA>
    //   	</SII:RESP_HDR>
    //   	<SII:RESP_BODY>
    //   		<TOKEN>XAuSbYXiNh9Ik</TOKEN>
    //   	</SII:RESP_BODY>
    //   </SII:RESPUESTA>

    // Parse the XML response.
    var xml = new chilkat.Xml();
    xml.LoadXml(resp.BodyStr);
    var ESTADO = xml.GetChildIntValue("SII:RESP_HDR|ESTADO");
    var GLOSA = xml.GetChildContent("SII:RESP_HDR|GLOSA");
    var TOKEN = xml.GetChildContent("SII:RESP_BODY|TOKEN");

}

chilkatExample();