Buscar en este blog

martes, 2 de abril de 2013

Como recuperar el TOKEN del SII

Cómo recuperar el TOKEN del SII


Bueno finalmente solo está faltando la recuperación del TOKEN del SII para poder autenticado en el SII. El TOKEN no es otra cosa que una cadena de caracteres que indica que el proceso de autenticación fue satisfactorio, lo que significa para nosotros que ya podemos operar en el SII sin necesidad de ingresar tu User y Password.
Para poder recuperar el Token es necesario contar con la clase GetTokenFromSeedService la cual expone el método GetToken(). Si no dispones de ella te recomiendo que leas el tutorial completo para saber cómo crearla. De todas formas les dejo el link para que la bajen y puedan agregarla directamente a sus proyectos.

Obtener clase GetTokenFromSeedService



También debe contar con el documento xml que representa la semilla firmada. Un ejemplo de ella es este código:





1234567890123










8slcL05kmrM8NGw4I9NSfRqYA9E=


jlbzatIIBLW8AjH++5uVTTrGIMVwGButuoAR88y/hvSc1+6/eW1K864fK3cKi76oArqk7lAM4pPokoXme0JT/hRXXGo6ecuKzO18z2WfPWwgnN0f3ac03TDu7PwfqiDG9mhQpYfIkNp6GNJIiqlg9PG2w1fOJ1QoypsrQmKq6YU=



2Pb4kEB19m7NmOUYew9f36325yrTLTPMU7qzYG2A0/BsubxDdgQw2Op0x6zXvOVX
sYI9KkPXtD5orKJMjwxYRv9wUWdyiE776Rv4ljfJO7EQhIK1fDQDnPt0HefBS06Xzg2QLBvLR+pe1vc6C02Dr99v+lnLA8mnZiJlRHndhNU=

AQAB



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=





El cómo generar el archivo xml y cómo firmarlo se describe en el capitulo Como firmar la semilla del SII. Lo importante de este archivo es que debe ser pasado al método GetToken() En formato string, sin ningún tipo de modificaciones. Muchos de nosotros al trabajar con documentos xml tendemos a organizarlos de forma que su lectura sea clara para el desarrollador. Sin embargo los documentos xml al ser generados son solo representaciones de datos de forma lineal. En el caso de la semilla firmada esta debe ser pasada al método de la misma forma que se firmó, pues cualquier modificación entre ambos eventos invalidará la firma subyacente en el documento.

Ejemplo: Sí la semilla firmada se encuentra alojada en un objeto XmlDocument traspase el contenido usando este paso:




#region Recuperar TOKEN

   ////
   //// Suponiendo que el objeto XmlDocument ( XMLDOM ) contenga 
   //// la semilla firmada, esta debería ser la forma de recuperar
   //// el valor string.
   string signedSeed= XmlDocument.InnerXml;

   ////
   //// Luego asigne el valor al metodo GetToken()
   Proxys.Produccion.GetTokenFromSeedService gt = new Proxys.Produccion.GetTokenFromSeedService();
   string valorRespuesta = gt.getToken(signedSeed);


#endregion

El Resultado de valorRespuesta es el valor regresado por el SII que nos indicará si el proceso fue correcto.

41 comentarios:

  1. Estimado todo este tema de la factura electronica se puede realizar en visual 6.0

    ResponderEliminar
    Respuestas
    1. Hernan efectivamente todos estos procesos son suceptibles de ejecutarse en vb 6.0, la diferencia es que .net ofrece algo de comodidad para realizarlo. Otra diferencia es que debes utilizar librerias externas para realizar computos de criptologia.

      Eliminar
  2. Ok Marcelo muchas gracias, creo que voy a pasar el código de la aplicación a visual .net , tengo otra consulta todos estos procesos de autentificacion, solo se hacen una vez al inicio o por cada factura que uno vaya emitiendo.

    Desde ya muchas gracias

    Saludos

    ResponderEliminar
    Respuestas
    1. Hernan,

      Cuando tienes un set de DTEs o un libro de compra y venta electrónico puedes recuperar el trackid y enviarlos, por cada dte no vale la pena generar una session, pero si tienes 1 o mas lo depositas en el SETDTE y los envias con un solo trackid. Lo mismo para los libros ( IECV )

      Eliminar
  3. buenos tutoriales, es cosa de fijarse en el seed y funka de maravilla xD

    <img srchttp://img24.imageshack.us/img24/8185/ct7m.png

    ResponderEliminar
    Respuestas
    1. Gracias por tu comentario, espero que la informaciòn te ayude en tus proyectos

      Eliminar
  4. Consulta, en Facturacion Electronica de Argentina el token dura 12 horas, con el SII, cuanto dura el token?
    Gracias!

    ResponderEliminar
    Respuestas
    1. En Chile la duraciòn del TOKEN es de 2 minutos mas o menos

      Eliminar
    2. Muchas gracias por compartir esta información tan relevante para nosotros los desarrolladores.
      Tengo una duda, esta información la chequeaste? debido a que he hecho pruebas en el ambiente de certificación y con una misma semilla (con el mismo Token) me ha durado mas de 30 minutos.

      Eliminar
  5. Hola Marcelo puedes ayudarme. Mira obtengo esto como respuesta al solicitar el token.



    -03
    Error (12) parse ERROR validacion contra CA



    el xml firmado es este:


    137366887806yw7QxweUreu30WQnnUjj7UDQk=R4wd6VC5/fHjIjbDZxVEdA+8NBeHvn0IsIHMdA5IkmnIp4jK95VSdjFMWhsUqL4X14wEq/4cqYCJBDCXSk+vLg==wmO/ssiV9XzqFAbBJYpLaGnQw1Z/EfC0G32r7KsULC8nVw+UniJ1SkfcPfWvYrKyS9UXLAgCpI260rJyZ9z4ow==AQABMIIDCzCCAfOgAwIBAgIJANE0l0SzBeBlMA0GCSqGSIb3DQEBBQUAMIGaMQswCQYDVQQGEwJDTDERMA8GA1UECBMIU2FudGlhZ28xETAPBgNVBAcTCFNhbnRpYWdvMSAwHgYDVQQKExdBdXRvcmlkYWQgQ2VydGlmaWNhZG9yYTEUMBIGA1UECxMLUHJ1ZWJhcyBEVEUxETAPBgNVBAMTCGR0ZS10ZXN0MRowGAYJKoZIhvcNAQkBFgtlbWFpbEBjYS5jbDAeFw0wOTEyMDMyMDE0NDFaFw0xOTEyMDEyMDE0NDFaMIGNMQswCQYDVQQGEwJDTDERMA8GA1UECBMIU2FudGlhZ28xETAPBgNVBAcTCFNhbnRpYWdvMREwDwYDVQQKEwhBY21lIEluYzEUMBIGA1UECxMLRmFjdHVyYWNpb24xETAPBgNVBAMTCHRlc3QtZHRlMRwwGgYJKoZIhvcNAQkBFg1lbWFpbEBhY21lLmNsMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMJjv7LIlfV86hQGwSWKS2hp0MNWfxHwtBt9q+yrFCwvJ1cPlJ4idUpH3D31r2KyskvVFywIAqSNutKycmfc+KMCAwEAAaMnMCUwIwYDVR0RBBwwGqAYBggrBgEEAYZAAaAMFgoxMDAwMDAwMC04MA0GCSqGSIb3DQEBBQUAA4IBAQAwKBNVtzO7qmA5gbSXPANQBh2ziuVjKJp3Xj4sHmTZViVGYdrIJKwTdK/oSMWxQ6R+X6tHsT7vy9cgrdBvEt/KV8jP/3+yJE+pPam7udRjaBYbVDQ63r3zKK7QNR3eOnJ1t7FxHUiDfhIR2+ZKuC//LAiuQcofh2CcfKzni5GJcmbyT91ZvQn/k1DFHusLt86alSNJ7moSwg7RYDZjkHVoUyRlyTDoy2XCci9lFWxk9lyrGJDL6OCl8n0BDSnD+bI+hsIpskKMLfDqs/MvHPGOpzN2iuWau+lncGt2aCXSCd0I5V7Z0MZYI6eMY+mwZmPAewe1/4IksLDIFBLC8njM

    No sé que estoy haciendo mal. Agradeceria tu ayuda.

    Saludos y gracias

    ResponderEliminar
    Respuestas
    1. Mandame el xml al correo abaddon.1974@gmail.com
      lo reviso y te cuento

      Eliminar
    2. Hola! ¿Lograron resolver este problema? me está lanzando lo mismo y no puedo solucionarlo. Saludos!

      Eliminar
    3. Hola Marcelo:

      Estoy usando para firmar el contribuyente1.p12 que viene en las librerias de NIC bajadas de github, y me de el mismo error:

      Error (12) parse ERROR validacion contra CA

      Mi consulta es
      - ¿esto pasa por que la firma del contribuyente1.p12 ya no es valida en el sitio de Test de SII?
      - ¿tengo que usar una que este aprobada por el SII para el ambiente de pruebas?

      Muchas gracias por sus aportes, son una gran ayuda!!!

      Abrazo!

      Eliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Bueno no salieron las etiquetas del xml...(?)

    ResponderEliminar
  8. Hola Marcelo, Primero que todo te felicito por el tutorial, gracias por compartir conocimientos.
    Estoy con el siguiente problema, al solicitar el token el sii me devuelve lo sgte.:
    02 XML Invalido (SAXException), funcion valSignedXml
    La estructura del xml la he obtenido del mismo manual del sii, también utilizé el xml de esta página pero tampoco.
    Gracias de antemano

    sss

    ResponderEliminar
  9. Hola Marcelo, sabes tuve problemas con recuperar el token porque me salia un error 06 que decia basicamente que no encontraba el elemento "Semilla". El problema es que en el metodo "FirmarSemilla" hay una "s" minuscula para semilla y debe ser con la "S" mayuscula:
    Mira asi me da error 06:
    string body = string.Format("{0}", double.Parse(seed).ToString());
    Asi me funciona bien:
    string body = string.Format("{0}", double.Parse(seed).ToString());

    es un detalle pero se puede perder algo de tiempo buscando el problema.

    por cierto quiero agradecerte todo este gran aporte que haz hecho!!!!

    Saludos

    ResponderEliminar
  10. Lo siento, el bloggler me borro el codigo, lo que quise decir fue asi:

    Mira asi me da error 06:
    string body = string.Format("<gettoken><item><semilla>{0}</semilla></item></gettoken>", double.Parse(seed).ToString());

    Asi me funciona bien:
    string body = string.Format("<gettoken><item><Semilla>{0}</Semilla></item></gettoken>", double.Parse(seed).ToString());

    ResponderEliminar
    Respuestas
    1. Correcto estimado, me daba el mismo error y era la "S" mayuscula en el tag de semilla... gracias y saludos

      Eliminar
  11. Querido Marcelo, quiero agradecerte muchisimo por la ayuda que nos has brindado, gracias a tu guia he podido realizar correctamente el proceso de autenticacion automatica, quisiera hacerte una consulta, al parecer cada vez que genero esta autenticacion genero una nueva cesion en el servicio "al entrar mediante explorador me dice que hay demasiadas cesiones abiertas que en 2 horas vuelva", la pregunta es como puedo cerrar una cesion abierta mediante autenticacion automatica?, desde ya muchas gracias.

    ResponderEliminar
  12. Franco A. Gomara G.22 de julio de 2016, 10:47

    Marcelo,

    Primero que nada te quiero felicitar por el tremendo espíritu altruísta que tienes, ciertamente hay pocos como tú que comparten este conocimiento y tan bien explicado.

    Dicho esto, te quería hacer una consulta (si es posible)

    Mira, desarrollé una solución al pié de la letra como nos enseñaste y funcionó de maravilla no sin uno que otro tropiezo, finalmente me tomó 3 noches completar correctamente todo lo que explicas.

    En este mento tengo solucionado el tema de Semilla y Token en forma existosa (00).

    Inicialmente me encuentro en la siguiente página https://zeus.sii.cl/AUT2000/InicioAutenticacion/IngresoRutClave.html?https://palena.sii.cl/cgi_dte/consultaDTE/wsDTEConsRecContHtml.cgi de SII (estoy utilizando un control WebBrowser embebido en mi formulario Windows C#) entonces una vez que me autentifico correctamente y el token me retorna "00" - Token Creado.

    Esta es la consulta: Como envío ese dato a la página para que al hacer WebBrowser.Navigate("...") vaya a la página siguiente después de seleccionar el certificado? es decir a la siguiente página : https://palena.sii.cl/cgi_dte/consultaDTE/wsDTEConsRecContHtml.cgi

    De antemano quiero expresar mi admiración por tu tremendo trabajo.

    Muchas Gracias Marcelo
    Franco Gomara

    ResponderEliminar
  13. Que tal Marcelo. La verdad me ayudo mucho la guia. Ya tengo el token. Lo que necesito hacer es facturar. Tengo una aplicacion que genera la factura. Desde AFIP argentina mando los datos de la factura y la afip de devuelve un numero y como se valido esa factura. Como deberia seguir ahora para facturar. Porque vi mucha documentacion pero no se cual seria el paso proximo. Muchas gracias

    ResponderEliminar
    Respuestas
    1. Maximiliano

      Consitnua timbrando y firmando el documento, luego debes ensobrarlo en un documento EnvioDTE y firmar el envio. Eso dejara listo el documento para ser enviado al SII.

      Eliminar
  14. me retorna el estado 10 en la respuesta desde SII, y no hay ninguna información para resolverlo, ¿alguien sabe?

    ResponderEliminar
    Respuestas
    1. 5.2.2 Los Estados de Salida de GetTokenFromSeed son:
      Estado Detalle Estado
      00 Token Creado
      01 XML Inválido (IOException), función valSignedXml
      02 XML Inválido (SAXException), función valSignedXml
      03 XML Inválido (ParserConfigurationException), función valSignedXml
      04 XML Inválido, elemento “Signature” no existe, función valSignedXml
      05 XML Inválido, firma invalida, función valSignedXml
      06 XML Inválido, elemento “Semilla” no existe, función getSeed
      07 ERROR (MessageException).
      08 ERROR RETORNO :
      "PARAMETROS INCORRECTOS"
      "TIME-OUT DEL SEED"
      "NO GENERA TOKEN func:CreaToken"
      "NO PUEDO ACT. SEED CON TOKEN"
      "TIME-OUT del SEED"
      "NO Existe SEED"
      09 ERROR (MessageException).
      10 ERROR RETORNO:
      "ERROR RETORNO DATOS"
      "NO PUEDO CREAR O ACT. TOKEN"

      11 XML Inválido, elemento “Certificate” no existe, función getCertificado
      12 ERROR (12) (MessageException)
      21 Firma invalida( La llave pública no coincide con la del certificado).
      -3 Error en Autenticación
      -07 Error (12) parse ERROR en Validación del RUT (verificar que el usuario se
      encuentre registrado en el SII con la opción de autenticación mediante

      Eliminar
  15. Hola,
    Estoy intentando la autenticación con el el SII, pero la respuesta que me retorna es incongruente con los ejemplos que muestran, porque combina el status 10 con la glosa del error 11


    10
    XML Inválido, elemento "Certificate" no existe, función getCertificado



    Podría ayudarme con la posible causa del error. Ya he comparado la semilla firmada con los ejemplos publicados y no hay diferencia, exceptuando el contenido del certificado claro

    ResponderEliminar
  16. Estimados:
    alguien puede decirme las causa del error 10 ERROR: RETORNO DATOS?

    ResponderEliminar
    Respuestas
    1. Estimado Pablo
      En que lenguaje estas trabajando, puedes enviar me la rutina para revisarla.

      Gracias

      Eliminar
    2. Marcelo, ya lo solucione... ocupo el lenguaje GENERO-4js.
      ahora tengo otro problema y es el POST del UPLOAD que me da el error Bad MIME in Content-Type.

      archivo UPLOAD:

      POST /cgi_dte/UPL/DTEUpload HTTP/1.0
      Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/ms-excel, application/msword, */*
      Referer: http://www.qusoft.cl
      Accept-Language: es-cl
      Content-Type: multipart/form-data; boundary=3dr435cdr56we23
      Accept-Encoding: gzip, deflate
      User-Agent: Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp 5.0.2.4)
      Host: maullin.sii.cl:443
      Content-Length: 12035
      Connection: Keep-Alive
      Cache-Control: no-cache
      Cookie: TOKEN=MHP7S8VI0SANX
      --3dr435cdr56we23
      Content-Disposition: form-data; name="rutSender"

      8041521
      --3dr435cdr56we23
      Content-Disposition: form-data; name="dvSender"

      4
      --3dr435cdr56we23
      Content-Disposition: form-data; name="rutCompany"

      76046719
      --3dr435cdr56we23
      Content-Disposition: form-data; name="dvCompany"

      7
      --3dr435cdr56we23
      Content-Disposition: form-data; name="archivo"; filename="E341012042017.xml"
      Content-Type: application/octet-stream
      Content-Transfer-Encoding: binary



      --3dr435cdr56we23--

      Eliminar
    3. Estimado, estoy trabajando en el mismo lenguaje, haciendo exactamente lo mismo.
      Me puedes ayudar?

      Me puedes mandar el trozo de código para la firma y la obtención del token?

      Eliminar
  17. Con respecto al token aparte de parsear el xml de respuesta viene con algún tipo de encriptación? (Algo asi lei en el manual)

    ResponderEliminar
  18. Hola Marcelo, primero que nada agradecerte por este blog que ha servido de tanta ayuda para muchas personas, yo una de ellas.

    En este momento quería preguntarte a ver si me podrías ayudarme con el siguiente error. Ya logre rescatar la Semilla y Firmarla, pero al momento de rescatar el Token me aparece estado 10, que corresponde al "Error de Retorno de Datos", pero en la Glosa me aparece "XML Inválido, elemento "Certificate" no existe, función getCertificado". No se si tienes información a que se deben estos errores? O como podría corregirlos. Trabajo en VB.NET.

    Muchas gracias por todo de antemano,
    Saludos.

    ResponderEliminar
    Respuestas
    1. Estimado,
      Este problema generalmente es por que no llegas a ver el web services, por esta razón te dice elemento certificate no existe. de todas formas sería bueno ver el documento xml semilla + firma que estas generando para saver si esta correcto.

      Llamame a la noche y veamoslo 997800285

      Eliminar
    2. Estimado, de casualidad resolvió su problema con el xml generado semilla + firma? Tengo dudas de como realizar este proceso en Vb.net

      Eliminar
  19. Estimados al consumir el WS, me devuelve el siguiente error:
    No such operation 'getToken'

    ResponderEliminar
  20. Hola alguien me puede ayudar? al consultar con SoapUI obtengo el siguiente error:



    soapenv:Server.userException
    org.xml.sax.SAXParseException: Content is not allowed in prolog.



    ResponderEliminar
    Respuestas
    1. Estimado,

      Que framework estas utilizando? este error se produce algunas veces por una actualización de seguridad de windows..

      Eliminar
    2. Windows 10 con sus actualizaciones instaladas

      Eliminar
    3. Estimado, de seguro es el problema de las actualizaciones de windows. Te recomiendo lo siguiente:

      - Crea un archivo txt en tu escritorio
      - copia las lineas que voy a poner aqui
      - cambia la extensión del archivo de txt a reg
      - ejecuta como administrador

      Esto debería solucianor tu problema


      Windows Registry Editor Version 5.00

      [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
      "SchSendAuxRecord"=dword:00000000

      Windows Registry Editor Version 5.00

      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
      "SchSendAuxRecord"=dword:00000000

      Eliminar
  21. Hola Marcelo, que buena iniciativa tu página, quisiera consultarte como hago para firmar la semilla que genera el WS del SII, estoy haciendo pruebas con el SOAPUI para conocer el funcionamiento de los WS, generé la semilla con el https://maullin.sii.cl/DTEWS/CrSeed.jws y luego trate de generar el token colocando la semilla en el https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws pero me da error 11, adicional me gustaría saber si alguien ha implementado estos WS desde SAP ABAP.

    Espero puedas ayudarme!

    ResponderEliminar
    Respuestas
    1. Estimad(@)

      Para poder firmar la semilla debes utilizar la siguiente secuencia.

      http://lenguajedemaquinas.blogspot.cl/2013/02/como-firmar-la-semilla.html

      Espero que esta información te ayude.

      Cualquier cosa me indicas

      Atte.
      Marcelo Rojas Rojas

      Eliminar