Manual de Desarrollador - Autenticación Automática SII

Documento base: autenticacion.pdf
Nombre original: Manual de Desarrollador - Autenticación Automática
Código: OI2007_AUTAUTOM_MDE_1.9
Institución: Servicio de Impuestos Internos - Subdirección Informática
Versión: 1.9 del 18/11/2007

Nota de conversión: este archivo Markdown corresponde a una versión estructurada y limpia del contenido técnico del manual de autenticación automática del SII. Está orientado a uso de implementación de API, integración, pruebas y certificación. Se mantuvieron los elementos técnicos relevantes: flujo, WSDL, parámetros, estados, XML de entrada/salida y endpoints de certificación/producción.


Índice

  1. Introducción
  2. Capítulo 1 - Análisis del sistema
  3. Capítulo 2 - Visión general del sistema
  4. Capítulo 3 - WSDL de autenticación automática
  5. Capítulo 4 - Parámetros de entrada
  6. Capítulo 5 - Parámetros de salida
  7. Capítulo 6 - Ejemplos XML de respuesta
  8. Capítulo 7 - Guía para realizar pruebas
  9. Capítulo 8 - Cómo firmar una semilla
  10. Anexo 1 - Ejemplo de token
  11. Checklist técnico para una API de integración con SII

Introducción

El método de autenticación automática, denominado AUTAUTOM, corresponde a un mecanismo mediante el cual el SII verifica el uso de la llave privada del certificado digital del cliente a través de Web Services.

Para cumplir su objetivo, AUTAUTOM entrega dos Web Services principales:

  • CrSeed
  • GetTokenFromSeed

Mediante estos servicios se obtiene:

  1. Un texto aleatorio o semilla.
  2. Un token de autenticación.

Estos elementos son requisitos para autenticar a una aplicación frente al SII y luego poder consumir otros servicios asociados a factura electrónica u otros procesos habilitados.

El documento está dirigido a desarrolladores que deben utilizar y probar los servicios CrSeed y GetTokenFromSeed.

Para acceder a los servicios del SII se utiliza WSDL, es decir, Web Services Definition Language, lenguaje descriptor basado en XML que permite conocer la ubicación, formato, tipos de datos, funciones, parámetros de entrada y salida de un Web Service.

WSDL principales en producción

https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL
https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL

Requisitos de uso

Para utilizar este manual se requiere conocimiento previo de:

  • XML.
  • Web Services.
  • Certificado digital.
  • Firma XML.

Capítulo 1 - Análisis del sistema

El sistema permite implementar autenticación automática mediante Web Services y certificado digital.

AUTAUTOM está implementado bajo una lógica B2B, que permite que las aplicaciones se comuniquen entre sí mediante llamadas de programa a programa.

A grandes rasgos, el flujo es el siguiente:

  1. El cliente remoto solicita al SII un texto aleatorio llamado semilla.
  2. El SII genera la semilla y la entrega al cliente.
  3. El cliente firma la semilla con la llave privada de su certificado digital.
  4. El cliente envía la semilla firmada al SII.
  5. El SII valida:
    • La firma.
    • La vigencia de la semilla.
    • El certificado digital.
  6. Si la validación es correcta, el SII entrega un token.
  7. El token permite acceder a otras aplicaciones del SII sin autenticarse nuevamente.

1.1 Quiénes pueden utilizar esta aplicación

Puede ser utilizada por personas o empresas que tengan registrada una clave secreta en las bases de datos del SII.

El sistema permite autenticarse mediante certificado digital válido para el SII.

1.2 Objetivo de la aplicación

El objetivo de la aplicación es entregar una solución de autenticación automática frente al SII.

1.3 Características de la aplicación

  • Autenticación programa a programa.
  • Autenticación sin intervención humana por parte del servidor.
  • Desarrollo en base a Web Services.
  • Autenticación mediante certificado digital.
  • El cliente debe estar registrado en las bases del SII como contribuyente habilitado para ingresar a aplicaciones autenticadas de Internet.

Capítulo 2 - Visión general del sistema

El flujo general de autenticación es:

sequenceDiagram
    participant Cliente as Aplicación Cliente
    participant CrSeed as WS CrSeed.jws
    participant Token as WS GetTokenFromSeed.jws
    participant SII as SII

    Cliente->>CrSeed: Request Semilla
    CrSeed-->>Cliente: Response Semilla
    Cliente->>Cliente: Firma semilla con certificado digital
    Cliente->>Token: Envía semilla firmada
    Token->>SII: Valida XML, semilla, certificado y firma
    alt Validación OK
        Token-->>Cliente: Envía Token
    else Validación fallida
        Token-->>Cliente: Error XML
    end

Para autenticarse, el cliente debe solicitar una semilla mediante un request al Web Service CrSeed.jws.

El Web Service genera automáticamente una semilla en formato XML. La semilla es almacenada en una base de datos y luego enviada al cliente.

La semilla es un número único y aleatorio, utilizado como identificador de sesión, y tiene una duración de 2 minutos.

Una vez recibida la semilla, el cliente debe firmarla y enviarla en formato XML estándar al SII mediante el Web Service GetTokenFromSeed.jws.

El SII valida:

  • Que el XML cumpla el formato solicitado.
  • Que la semilla esté vigente.
  • Que el certificado digital sea válido.
  • Que la firma sea válida.

Si la validación es correcta, se genera un token. Si falla, el Web Service responde con un mensaje de error en XML.

Información que debe contener el XML de semilla firmada

  • Semilla.
  • Firma.
  • Módulo de la llave pública.
  • Certificado digital.

Capítulo 3 - WSDL de autenticación automática

AUTAUTOM entrega dos Web Services:

  • CrSeed
  • GetTokenFromSeed.jws

3.1.1 WSDL de CrSeed.jws

CrSeed entrega el método getSeed, que permite obtener una semilla.

Endpoint producción

https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL

Fragmento WSDL relevante

<wsdl:definitions targetNamespace="https://palena.sii.cl/DTEWS/CrSeed.jws"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:apachesoap="http://xml.apache.org/xml-soap"
    xmlns:impl="https://palena.sii.cl/DTEWS/CrSeed.jws"
    xmlns:intf="https://palena.sii.cl/DTEWS/CrSeed.jws"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <wsdl:types/>

    <wsdl:message name="getSeedRequest" />

    <wsdl:message name="getSeedResponse">
        <wsdl:part name="getSeedReturn" type="xsd:string" />
    </wsdl:message>

    <wsdl:portType name="CrSeed">
        <wsdl:operation name="getSeed">
            <wsdl:input message="impl:getSeedRequest" name="getSeedRequest" />
            <wsdl:output message="impl:getSeedResponse" name="getSeedResponse" />
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="CrSeedSoapBinding" type="impl:CrSeed">
        <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="getSeed">
            <wsdlsoap:operation soapAction="" />
            <wsdl:input name="getSeedRequest">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                    namespace="https://palena.sii.cl/DTEWS/CrSeed.jws"
                    use="encoded" />
            </wsdl:input>
            <wsdl:output name="getSeedResponse">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                    namespace="https://palena.sii.cl/DTEWS/CrSeed.jws"
                    use="encoded" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="CrSeedService">
        <wsdl:port binding="impl:CrSeedSoapBinding" name="CrSeed">
            <wsdlsoap:address location="https://palena.sii.cl/DTEWS/CrSeed.jws" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

3.1.2 WSDL de GetTokenFromSeed.jws

GetTokenFromSeed entrega el método getToken, que permite obtener un token.

Endpoint producción

https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL

Operaciones relevantes

  • getVersion
  • getToken

El método getToken recibe como parámetro pszXml, que corresponde al XML de la semilla firmada.

<wsdl:message name="getTokenRequest">
    <wsdl:part name="pszXml" type="xsd:string" />
</wsdl:message>

Capítulo 4 - Parámetros de entrada

4.1.1 Parámetros de entrada para CrSeed.jws

CrSeed.jws no tiene parámetros de entrada.

4.1.2 Ejemplo SOAP para solicitar semilla

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <m:getSeed xmlns:m="https://palena.sii.cl/DTEWS/CrSeed.jws" />
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

4.1.3 Parámetros de entrada para GetTokenFromSeed.jws

Los parámetros de entrada de GetTokenFromSeed.jws corresponden a un string formado por los campos del XML que envía la semilla firmada.

4.1.4 Ejemplo SOAP para obtener token

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <m:getToken xmlns:m="https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws">
            <pszXml xsi:type="xsd:string">String</pszXml>
        </m:getToken>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

4.1.5 XML de entrada para semilla firmada

El XML debe contener la semilla y la firma bajo el estándar XML Digital Signature.

<?xml version="1.0"?>
<getToken>
    <item>
        <Semilla>10</Semilla>
    </item>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <DigestValue>...</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>...</SignatureValue>
        <KeyInfo>
            <KeyValue>
                <RSAKeyValue>
                    <Modulus>...</Modulus>
                    <Exponent>AQAB</Exponent>
                </RSAKeyValue>
            </KeyValue>
            <X509Data>
                <X509Certificate>...</X509Certificate>
            </X509Data>
        </KeyInfo>
    </Signature>
</getToken>

Capítulo 5 - Parámetros de salida

5.1.1 Parámetros de salida

La salida de los servicios corresponde a un string XML codificado según estándar XML. Por lo tanto, el cliente debe decodificar el string y llevarlo a su formato XML original.

Los campos de retorno son:

  • ESTADO
  • GLOSA
  • DATOS, que puede corresponder a SEED, SEMILLA o TOKEN según el servicio.
CampoTipoLargoDetalleObligatorio
ESTADOString alfanumérico1-8Código de estado
GLOSAString alfanumérico1-1Detalle del estado
DATOSString numérico1-5Nombre del tag variable según dato solicitado

5.2.2 Estados de salida de CrSeed

EstadoDetalle
00OK, genera semilla
-1No se registró línea en el archivo de configuración
-2Error de retorno

Errores asociados al estado -2:

  • ERROR RETORNO
  • NO PUEDO CREAR O ACT. TOKEN

5.2.2 Estados de salida de GetTokenFromSeed

EstadoDetalle
00Token creado
01XML inválido, IOException, función valSignedXml
02XML inválido, SAXException, función valSignedXml
03XML inválido, ParserConfigurationException, función valSignedXml
04XML inválido, elemento Signature no existe, función valSignedXml
05XML inválido, firma inválida, función valSignedXml
06XML inválido, elemento Semilla no existe, función getSeed
07Error MessageException
08Error de retorno
09Error MessageException
10Error de retorno
11XML inválido, elemento Certificate no existe, función getCertificado
12Error MessageException
21Firma inválida; la llave pública no coincide con la del certificado
-3Error en autenticación
-07Error de parse en validación de RUT; verificar que el usuario esté registrado en el SII con autenticación mediante certificado digital

Errores asociados al estado 08:

  • PARAMETROS INCORRECTOS
  • TIME-OUT DEL SEED
  • NO GENERA TOKEN func:CreaToken
  • NO PUEDO ACT. SEED CON TOKEN
  • NO Existe SEED

Errores asociados al estado 10:

  • ERROR RETORNO DATOS
  • NO PUEDO CREAR O ACT. TOKEN

5.2.3 Ejemplo de salida codificada de CrSeed.jws

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns1:getSeedResponse
            soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:ns1="https://palena.sii.cl/DTEWS/CrSeed.jws">
            <getSeedReturn xsi:type="xsd:string">
                &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
                &lt;SII:RESPUESTA xmlns:SII=&quot;http://www.sii.cl/XMLSchema&quot;&gt;
                &lt;SII:RESP_HDR&gt;&lt;ESTADO&gt;00&lt;/ESTADO&gt;&lt;/SII:RESP_HDR&gt;
                &lt;SII:RESP_BODY&gt;&lt;SEMILLA&gt;000000000078&lt;/SEMILLA&gt;&lt;/SII:RESP_BODY&gt;
                &lt;/SII:RESPUESTA&gt;
            </getSeedReturn>
        </ns1:getSeedResponse>
    </soapenv:Body>
</soapenv:Envelope>

Salida decodificada de CrSeed.jws

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/XMLSchema">
    <SII:RESP_HDR>
        <ESTADO>00</ESTADO>
    </SII:RESP_HDR>
    <SII:RESP_BODY>
        <SEMILLA>000000000078</SEMILLA>
    </SII:RESP_BODY>
</SII:RESPUESTA>

Ejemplo salida codificada de GetTokenFromSeed.jws

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns1:getTokenResponse
            soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:ns1="http://palena.sii.cl/DTEWS/GetTokenFromSeed.jws">
            <getTokenReturn xsi:type="xsd:string">
                &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
                &lt;SII:RESPUESTA xmlns:SII=&quot;http://www.sii.cl/XMLSchema&quot;&gt;
                &lt;SII:RESP_HDR&gt;&lt;ESTADO&gt;00&lt;/ESTADO&gt;&lt;GLOSA&gt;Token Creado&lt;/GLOSA&gt;&lt;/SII:RESP_HDR&gt;
                &lt;SII:RESP_BODY&gt;&lt;TOKEN&gt;XAuSbYXiNh9Ik&lt;/TOKEN&gt;&lt;/SII:RESP_BODY&gt;
                &lt;/SII:RESPUESTA&gt;
            </getTokenReturn>
        </ns1:getTokenResponse>
    </soapenv:Body>
</soapenv:Envelope>

Salida decodificada de GetTokenFromSeed.jws

<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>XAuSbYXiNhIk</TOKEN>
    </SII:RESP_BODY>
</SII:RESPUESTA>

Capítulo 6 - Ejemplos XML de respuesta

6.1 Ejemplo salida genera semilla

Estado 00 - genera semilla

<?xml version="1.0" encoding="UTF-8"?>
<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>00</ESTADO>
    </SII:RESP_HDR>
    <SII:RESP_BODY>
        <SEED>00000000064</SEED>
    </SII:RESP_BODY>
</SII:RESPUESTA>

Estado -1 - error no genera semilla

<?xml version="1.0" encoding="UTF-8"?>
<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>-1</ESTADO>
        <GLOSA>Error : (Message Exception)</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado -2 - error BD / retorno

<?xml version="1.0" encoding="UTF-8"?>
<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>-2</ESTADO>
        <GLOSA>ERROR RETORNO</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

6.2 Ejemplo salida genera token

Estado 00 - genera token

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>00</ESTADO>
        <GLOSA>Token Creado</GLOSA>
    </SII:RESP_HDR>
    <SII:RESP_BODY>
        <TOKEN>AB82001ABRT</TOKEN>
    </SII:RESP_BODY>
</SII:RESPUESTA>

Estado 01 - XML inválido, IOException

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>01</ESTADO>
        <GLOSA>XML invalido (IOException), función valSignedXml</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado 02 - XML inválido, SAXException

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>02</ESTADO>
        <GLOSA>XML Invalido (SAXException), funcion valSignedXml</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado 08 - time-out del seed

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>08</ESTADO>
        <GLOSA>TIME-OUT DEL SEED</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado 09 - MessageException

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>09</ESTADO>
        <GLOSA>ERROR (MessageException)</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado 10 - error retorno datos

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>10</ESTADO>
        <GLOSA>ERROR RETORNO DATOS</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado 11 - elemento Certificate no existe

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>11</ESTADO>
        <GLOSA>XML Invalido, elemento Certificate no existe, función getCertificado</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado 12 - MessageException

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>12</ESTADO>
        <GLOSA>ERROR (12) (MessageException)</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Estado -3 - error en autenticación

<SII:RESPUESTA xmlns:SII="http://www.sii.cl/xxx">
    <SII:RESP_HDR>
        <ESTADO>-3</ESTADO>
        <GLOSA>Error en Autenticación</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Capítulo 7 - Guía para realizar pruebas

Para probar los Web Services de autenticación automática se deben seguir estos pasos:

  1. Obtener una semilla invocando el servicio CrSeed.jws.
  2. Firmar la semilla mediante un cliente, usando el formato XML de entrada.
  3. Invocar GetTokenFromSeed.jws, enviando el XML con la semilla firmada.
  4. Obtener el token.

Producción

https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL
https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL

Certificación

Para ambiente de certificación se reemplaza palena.sii.cl por maullin.sii.cl.

https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL
https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL

Capítulo 8 - Cómo firmar una semilla

Para firmar una semilla se deben seguir los siguientes pasos:

  1. Obtener una semilla invocando CrSeed.jws en certificación o producción.
  2. Leer la respuesta XML.
  3. Extraer el campo que contiene la semilla.
  4. Construir el objeto getToken con la semilla.
  5. Firmar dicho objeto con XML Digital Signature.
  6. Enviar el XML firmado al servicio GetTokenFromSeed.jws.

Ejemplo respuesta CrSeed.jws

<?xml version="1.0" encoding="UTF-8"?>
<SII:RESPUESTA xmlns:SII="http://www.sii.cl/XMLSchema">
    <SII:RESP_BODY>
        <SEMILLA>000002360958</SEMILLA>
    </SII:RESP_BODY>
    <SII:RESP_HDR>
        <ESTADO>00</ESTADO>
    </SII:RESP_HDR>
</SII:RESPUESTA>

Campo a firmar

<SEMILLA>000002360958</SEMILLA>

Objeto getToken

<getToken>
    <item>
        <Semilla>000002360958</Semilla>
    </item>
</getToken>

Pasos criptográficos

Una vez integrado el objeto getToken con la semilla, se deben realizar los siguientes pasos:

  1. Aplicar transformación y canonicalización al objeto.
  2. Calcular el hash del objeto para crear DigestValue.
  3. Crear el elemento SignedInfo.
  4. Canonicalizar y calcular la firma.
  5. Crear SignatureValue con el valor de la firma.
  6. Generar la información de claves en KeyInfo.

Estos pasos pueden ser realizados manualmente o mediante una librería de firma XML.

Ejemplo estructura final firmada

<?xml version="1.0"?>
<getToken>
    <item>
        <Semilla>000002248802</Semilla>
    </item>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <DigestValue>...</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>...</SignatureValue>
        <KeyInfo>
            <KeyValue>
                <RSAKeyValue>
                    <Modulus>...</Modulus>
                    <Exponent>AQAB</Exponent>
                </RSAKeyValue>
            </KeyValue>
            <X509Data>
                <X509Certificate>...</X509Certificate>
            </X509Data>
        </KeyInfo>
    </Signature>
</getToken>

El elemento Signature corresponde al parámetro de entrada requerido por el Web Service GetTokenFromSeed.jws para generar el token.


Anexo 1 - Ejemplo de token

TOKEN=gd43dh6sfE34Kd3

Checklist técnico para una API de integración con SII

Para que una API esté preparada para iniciar integración y certificación contra SII, debería contemplar al menos estos módulos internos:

Autenticación SII

  • Endpoint para solicitar semilla a CrSeed.jws.
  • Parser de respuesta XML de semilla.
  • Firma XML de semilla usando certificado digital.
  • Endpoint para solicitar token a GetTokenFromSeed.jws.
  • Cache de token.
  • Manejo de expiración y renovación.
  • Trazabilidad de errores de autenticación.

Certificado digital

  • Carga segura de certificado.
  • Custodia segura de llave privada.
  • Soporte para PFX/P12 o formato usado por el proveedor.
  • Validación de vigencia del certificado.
  • Registro del RUT autorizado para operar.

Ambientes

  • Configuración de ambiente de certificación.
  • Configuración de ambiente de producción.
  • Cambio parametrizable entre maullin.sii.cl y palena.sii.cl.

SOAP/XML

  • Cliente SOAP compatible con RPC/encoded.
  • Serialización y deserialización XML.
  • Decodificación de respuestas XML codificadas como string.
  • Manejo de namespaces.
  • Manejo de XML Digital Signature.

Manejo de errores

  • Interpretación de estados CrSeed.
  • Interpretación de estados GetTokenFromSeed.
  • Reintentos controlados.
  • Control del timeout de semilla de 2 minutos.
  • Logs técnicos con request/response sanitizados.

Endpoints internos sugeridos

POST /sii/auth/seed
POST /sii/auth/token
GET  /sii/auth/token/status
POST /sii/auth/sign-seed
GET  /sii/health/certificado
GET  /sii/health/wsdl

Endpoints SII relevantes para autenticación

Certificación

https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL
https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL

Producción

https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL
https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL

Observaciones para implementación actual

Este documento cubre únicamente la autenticación automática. Para completar una API de facturación electrónica DTE ante el SII también deberías revisar e implementar, además:

  • Envío automático de DTE.
  • Consulta de estado de envío.
  • Consulta de estado de DTE.
  • Manejo de CAF y folios.
  • Firma de DTE.
  • Timbre electrónico TED.
  • Generación de PDF/timbre PDF417.
  • Intercambio entre contribuyentes.
  • Acuse de recibo.
  • Aceptación o rechazo comercial.
  • Bitácora, auditoría y respaldo.