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();