Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

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 Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.Cert;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Http;
import com.chilkatsoft.chilkat2.HttpResponse;
import com.chilkatsoft.chilkat2.StringBuilder;
import com.chilkatsoft.chilkat2.Xml;
import com.chilkatsoft.chilkat2.XmlDSigGen;

public class ChilkatExample {

    public static void main(String[] args) {
        // 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>
        //
        Xml xmlToSign = new Xml();
        xmlToSign.setTag("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>

        XmlDSigGen gen = new XmlDSigGen();

        gen.setSigLocation("getToken");
        gen.setSigLocationMod(0);
        gen.setSigNamespacePrefix("");
        gen.setSigNamespaceUri("http://www.w3.org/2000/09/xmldsig#");
        gen.setSignedInfoCanonAlg("C14N");
        gen.setSignedInfoDigestMethod("sha1");

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

        // Provide a certificate + private key. (PFX password is test123)
        Cert cert = new Cert();
        try {
            cert.loadPfxFile("qa_data/pfx/cert_test123.pfx", "test123");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        gen.setX509Cert(cert, true);

        gen.setKeyInfoType("X509Data+KeyValue");
        gen.setX509Type("Certificate");

        // Load XML to be signed...
        StringBuilder sbXml = new StringBuilder();
        xmlToSign.getXmlSb(sbXml);

        gen.setBehaviors("IndentedSignature");

        // Sign the XML...
        try {
            gen.createXmlDSigSb(sbXml);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(sbXml.getAsString());

        // Send the POST with signed XML in the request body
        Http http = new 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
        String url = "https://apicert.sii.cl/recursos/v1/boleta.electronica.token";
        HttpResponse resp = new HttpResponse();
        try {
            http.httpSb("POST", url, sbXml, "utf-8", "application/xml", resp);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Examine the response status code:
        System.out.println("response status code = " + resp.getStatusCode());

        // Examine the response body:
        System.out.println("response body: " + resp.getBodyStr());

        // 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.
        Xml xml = new Xml();
        xml.loadXml(resp.getBodyStr());
        int ESTADO = xml.getChildIntValue("SII:RESP_HDR|ESTADO");
        String GLOSA = xml.getChildContent("SII:RESP_HDR|GLOSA");
        String TOKEN = xml.getChildContent("SII:RESP_BODY|TOKEN");
    }
}