Bueno unos de los problemas más frecuentes para el proceso de conexión y autentificación contra el SII es que muchos de los programas que hoy realizan esta tarea se comunican de forma nativa a través de JAVA. Generalmente los desarrolladores como yo tenemos muchos problemas para hacerlo pues necesitamos algún conector ( proxy ) que nos ayude con la comunicación a servicios del tipo java. Para solucionar esto les dejo un pequeño tutorial para generar su clase proxy y también el cómo pueden acceder a el para utilizarlo.
Definición según el SII
Según la definición formal del SII ( Servicio de Impuestos Internos ), el proceso de autenticación automatica corresponde a: "Es un chequeo del uso de la llave privada del certificado del cliente, mediante el uso de Web Services (WS).". En donde el certificado del cliente es aquel que utiliza el usuario registrado en el SII para acceder a los servicios del portal del SII.
Les dejo el link del archivo Manual de Desarrollador Autenticación Autemática SII para que tengan mas información técnica del proceso.
Les dejo el link del archivo Manual de Desarrollador Autenticación Autemática SII para que tengan mas información técnica del proceso.
Como crear el proxy
Primero que nada debemos saber que el SII tiene dos formas de trabajo disponibles para los usuarios registrados en su portal. Un ambiente de pruebas denominado ‘Certificación’ y otro en donde aquellos postulantes de la factura electrónica ya pasaron todos los test del SII para incorporarse completamente al ambiente de ‘Producción ‘ del SII.
Para tales efectos los dejo las direcciones de donde obtener los manifiestos de los servicios disponibles del SII.
Para tales efectos los dejo las direcciones de donde obtener los manifiestos de los servicios disponibles del SII.
Para el ambiente de certificación es la siguiente dirección:
https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL
https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL
Para el ambiente de Producción es la siguiente dirección:
https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL
https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL
Nota:
Donde CrSeed.jws permite recuperar la semilla del SII y GetTokenFromSeed
representa el método a consultar cuando ya firmamos la semilla, el último método
regresa una respuesta en formato xml que nos indica si la autenticación fue
posible o no.
Lo primero que debe hacer es intentar conectarse en su explorador a estas urls, de tal forma que sepamos que el servicio esta operativo. En el caso que Ud. Sea un desarrollador .Net debe tener presente que para poder generar la conexión al SII es necesario tener activado de forma predeterminada el IExplorer de Microsoft en su equipo o servidor.
Nota:
Recuerde que al momento de generar la conexión debe saber claramente a donde lo esta haciendo, el SII asume gracias al certificado digital que tiene asignado el usuario del portal, que él sabe lo que esta haciendo y todas las responsabilidades que tiene por utilizar este servicio.
Una vez que ya sabe que puede llegar al servicio ( Conectarse ), podemos iniciar el proceso de construcción del proxy. Para tales efectos utilizaremos herramientas de Microsoft que nos ayudarán a realizar el proceso casi sin necesidad de escribir una línea de código. Para algunos esto resulta muy bueno, pero para desarrolladores como yo muchas veces se transforma en armas de doble filo, que funcionan correctamente en ambientes controlados, pero que dan muchos dolores de cabeza cuando no se comprende la lógica detrás de ellas.
Visual Studio 2011 tiene un gran número de herramientas disponibles que están disponibles a nivel de línea de comandos, las cuales deberás utilizar para generar el proxy.
Les dejo aquí la url de Microsoft para que lean detalladamente las características de la herramienta.
Web Services Description Language Tool ( WSDL.EXE )
Una vez que ya sabe que puede llegar al servicio ( Conectarse ), podemos iniciar el proceso de construcción del proxy. Para tales efectos utilizaremos herramientas de Microsoft que nos ayudarán a realizar el proceso casi sin necesidad de escribir una línea de código. Para algunos esto resulta muy bueno, pero para desarrolladores como yo muchas veces se transforma en armas de doble filo, que funcionan correctamente en ambientes controlados, pero que dan muchos dolores de cabeza cuando no se comprende la lógica detrás de ellas.
Visual Studio 2011 tiene un gran número de herramientas disponibles que están disponibles a nivel de línea de comandos, las cuales deberás utilizar para generar el proxy.
Les dejo aquí la url de Microsoft para que lean detalladamente las características de la herramienta.
Web Services Description Language Tool ( WSDL.EXE )
Procedimiento
Bueno en el caso mío, fueron varias horas de trabajo hasta conseguir lo que necesitaba, pero al final logré construir el conector (Proxy) utilizando la siguiente sintaxis. Primero, cree el archivo de contrato el cual almacenara la descripción de los servicios a los cuales quiere acceder, en mi caso cree un archivo plano denominado Contrato.wsdl donde deposite el contrato de servicios extraído de la URL de Producción. Lo cual me quedo algo como esto:
Ver archivo con descripción de GetSeed
Ver archivo con descripción de GetTokenFromSeed
Nota:
Los archivos creados apuntan al servidor de producción del SII, para crear los archivos de certificación, deberá editar los archivos y cambiar la referencia 'palena' por 'maullin'.
Una vez creado el archivo wsdl es necesario indicarle al ejecutable que es lo que se necesita hacer con el. En mi caso yo necesitaba que a partir de este archivo generará una clase del tipo librería que me permitiera acceder a los servicios del SII. Así que aplique esta sintaxis:
Wsdl /out:myProxyClass.cs Contrato.wsdl
Donde el primer parámetro corresponde al archivo de salida tipo clase c# y el segundo parámetro corresponde a nuestro archivo de contrato wsdl generado en el paso anterior. La nueva clase generada ahora puede ser insertada en nuestro proyecto .NET para ser consumida. El resultado de la conversión es algo como esto:
El resultado de la operacion arroja los siguientes archivos. En este caso les dejo una url de donde verlos utilizando Google Drive.
Ver clase proxy GetSeed
Ver clase proxy GetTokenFromSeedService
Con estas dos clases ya se encuentra listo para incluirlas en su proyecto y de esta forma iniciar el proceso de autenticación sobre el SII.
Hola,
ResponderEliminarSabes como se puede hacer para integrar el sistema de manejo de clientes "WHMCS" con el sistema de facturacion del SII para poder enviar facturas electronicas automaticamente a los clientes todos los meses?, tu sabes hacer esto?
WHMCS sistema de facturación para automatizar su negocio de alojamiento web
ResponderEliminarMarcel, la verdad es que este es un sistema de tipo web en donde la información que generas a nivel tributario queda almacenado con tu proveedor 'WHMCS' o en el lado del cliente, en este caso tú. Creo que no podría contestarte el como configurar tu app para poder realizar los envíos, busque información en la web pero el producto no tiene demos para analizar. De todas formas si tienes la información como tus DTEs o IECV a la mano la construcción de un modulo que realice el trabajo de transmisión al SII no es nada difícil. Si logras activar tu app para el envío de los documentos debes recordar que necesitas utilizar tu certificado digital y que cada envió te genera una respuesta del SII en formato xml que tu proveedor deberá interpretar para ti.
Bueno es todo lo que puedo decirte, me habría gustado poder ayudarte mas. Cualquier duda o comentario favor escríbenos.
Atte.
Marcelo Rojas Rojas
Desarrollador Tecnologías Microsoft
Hola Marcelo, muchas gracias por tu aporte, yo estoy iniciando un desarrollo para trabajar con factura electrónica. Esta clase la puedo utilizar desde vb.net?
ResponderEliminarCarlos,
EliminarLa verdada es que no necesitas especificamente clases muy complejas si no mas bien utilizar las clases nativas de .Net.
Puedes empezar revisando algunas coo:
XmlSigtnature : Que te permitirá firmar tus documentos electrónicos
Xml Xml.Linq : Para la manipulacion de documentos xml
Yo creo que deberías empezar por aqui y a medida que avances y tengas dudas, contestaré tus dudas con mucho agrado.
Hola Carlos, estoy interesado en implementar esto mismo en whmcs, me podrias contactar a mvergaraleon@gmail.com
EliminarYo trabajo con whmcs.
EliminarMarcelo tengo instalado visual studio 2012 y no encuentro el archivo wsdl la carpeta SDK 3.5 Bin esta vacia, que podrá ser.
ResponderEliminarAtento a sus comentarios
Saludos
Hernan,
EliminarComo estas? La verdad es que no estoy muy familiarizado con v.n 2012 pero de todas formas no te preocupes. Puedes bajar las clases utilizando los links de esta pagina para que no tengas que crearlas desde cero:
Busca estos enlaces en la pagina y baja las clases ya construídas
Ver archivo con descripción de GetSeed
Ver archivo con descripción de GetTokenFromSeed
Atte.
Marcelo Rojas Rojas
Marcelo estoy avanzando en la programación poco a poco, lo que me indicas me resulto sin ningún problema, lo que hice fue agregar las clases en C# y luego abrirlas en Vb.net al parecer no existe incompatibilidad.
ResponderEliminarAhora tratare de pasar al siguiente paso.
Te agradezco enormemente tu ayuda, ya que llevo varias horas tratando de comprender todo.
Saludos
Gracias.....
Estimado que bueno que estas clases le ayuden, cualquier cosa intentaré responderle.
EliminarMarcelo para probar estas clases y obtener la semilla tengo que tener un certificado digital valido instalado, o puedo solo probarla y que me devuelva el XLM de respuesta.
ResponderEliminarSaludos
Hernan,
EliminarEso es correcto a medias, para solicitar la semilla no necesitas certificado, pero pára firmar la semilla si. Puesto que la envias al SII y ellos deben regresarte el Token
Marcelo,
ResponderEliminarQue tal. Ya tengo un ejemplo operativo en JAVA para la autenticacion. Me gustaria consultarte algo por correo. Me puedes dar algun mail? Intente con abaddon.1974@gmail.com pero gmail no lo encuentra.
Un saludo!,
Oliver
Estimado, me puedes dar tu correo para realizarte una consulta porfavor, estoy intentando hacer esto en java.
EliminarSaludos
Puedes escribirme a abaddon.1974@gmail.com o llamarme a 62242459
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola Marcelo, sabes que te queria comentar que esta analisando tus clases que estan super buenas, pero no me encuentra esta clase al importarla.
ResponderEliminarSystem.Web.Services.Protocols.SoapRpcMethodAttribute
Saludos
Excelentes aportes.
ResponderEliminarGrande Marcelo.
http://www.factronica.cl/foros/index.php
Hola Marcelo,
ResponderEliminarAlguna vez tuvo problemas con el error "org.xml.SAX.SAXParser" al tratar de consumir cualqueir metodo del ws "https://maullin.sii.cl/DTEWS/CrSeed.jws?wsdl" ????
espero que si, desde ya muchas gracias por compartir !
Estimado, que lenguaje utilizas para realizar la conexion?
EliminarMarcelo,
EliminarUtilizo c# y al parecer el error se produce en versiones inferiores a .Net 4.6, .Net 4.6.1 soluciona el error.
Gracias por la pronta respuesta !
Te agradesco mucho la información, esto ayudará a muchos colegas de nuestro blog.
EliminarMuchas Gracias
Atte.
Marcelo Rojas Rojas
Si, efectivamete se mejoró con la version 4.6.1 - Gracias
EliminarBuenas noches a todos, muy bueno este blog para los que nos estamos iniciando en la facturación electrónica.
ResponderEliminarEstoy empezando con la semilla y me funciono todo perfecto salvo que en algún momento tuve este problema "org.xml.SAX.SAXParser" pero lo solucione con el aporte de Manuel Mejías.
Ahora mi consulta seria por qué debemos generar un proxy para la comunicación del WS de SII si podríamos hacer una referencia web dentro del mismo Visual Studio?.
Quedo atento a sus comentarios y gracias por toda la ayuda que facilita este blog.
CFV.
Buenos tus apuntes, estaba leyendo y me queda mucho mas claro gracias a ti como funciona eso de la facturación electrónica, tengo una pregunta: Como creas el contrato.wsdl, con getseed y gettoken?, esa es la parte que no entiendo, ya que no explicas como de ambas cosas llegaste a un solo archivo tu contrato.wsdl... hice pruebas, tus métodos funcionan, pero eso es lo único que no entiendo...
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminargracias por tus interesantes aportes
ResponderEliminarcomo se construye el Contrato.wsdl
gracias
Hola,
ResponderEliminarNo entendí mucho lo que quisiste decir acá: "Primero, cree el archivo de contrato el cual almacenara la descripción de los servicios a los cuales quiere acceder, en mi caso cree un archivo plano denominado Contrato.wsdl donde deposite el contrato de servicios extraído de la URL de Producción."
Pero analizando los archivos adjuntos, me parece que tomaste el contenido de "https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL" y lo modificaste quitándole tags que consideraste que sobraban. ¿Estoy en lo correcto en mi análisis?
Estimado,
EliminarLo que hice fue tomar la descripción de los servicios que estan presentes en la url y generé una clase utilizando la herramienta WSDL.exe esto solo para evitar perder tiempo haciendola yo mismo.
Atte.
Marcelo Rojas Rojas