Buscar en este blog

jueves, 21 de febrero de 2013

Clase Proxy para conectarse al SII

Cómo construir clase proxy para obtener semilla del SII
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.

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



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

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.


29 comentarios:

  1. Hola,

    Sabes 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?

    ResponderEliminar
  2. WHMCS sistema de facturación para automatizar su negocio de alojamiento web

    Marcel, 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

    ResponderEliminar
  3. 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?

    ResponderEliminar
    Respuestas
    1. Carlos,
      La 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.



      Eliminar
    2. Hola Carlos, estoy interesado en implementar esto mismo en whmcs, me podrias contactar a mvergaraleon@gmail.com

      Eliminar
  4. Marcelo tengo instalado visual studio 2012 y no encuentro el archivo wsdl la carpeta SDK 3.5 Bin esta vacia, que podrá ser.

    Atento a sus comentarios

    Saludos

    ResponderEliminar
    Respuestas
    1. Hernan,

      Como 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

      Eliminar
  5. 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.
    Ahora tratare de pasar al siguiente paso.

    Te agradezco enormemente tu ayuda, ya que llevo varias horas tratando de comprender todo.

    Saludos

    Gracias.....

    ResponderEliminar
    Respuestas
    1. Estimado que bueno que estas clases le ayuden, cualquier cosa intentaré responderle.

      Eliminar
  6. Marcelo 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.

    Saludos

    ResponderEliminar
    Respuestas
    1. Hernan,

      Eso 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

      Eliminar
  7. Marcelo,

    Que 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

    ResponderEliminar
    Respuestas
    1. Estimado, me puedes dar tu correo para realizarte una consulta porfavor, estoy intentando hacer esto en java.
      Saludos

      Eliminar
    2. Puedes escribirme a abaddon.1974@gmail.com o llamarme a 62242459

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

    ResponderEliminar
  9. Hola Marcelo, sabes que te queria comentar que esta analisando tus clases que estan super buenas, pero no me encuentra esta clase al importarla.
    System.Web.Services.Protocols.SoapRpcMethodAttribute

    Saludos

    ResponderEliminar
  10. Excelentes aportes.
    Grande Marcelo.
    http://www.factronica.cl/foros/index.php

    ResponderEliminar
  11. Hola Marcelo,

    Alguna 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 !

    ResponderEliminar
    Respuestas
    1. Estimado, que lenguaje utilizas para realizar la conexion?

      Eliminar
    2. Marcelo,

      Utilizo 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 !

      Eliminar
    3. Te agradesco mucho la información, esto ayudará a muchos colegas de nuestro blog.

      Muchas Gracias
      Atte.
      Marcelo Rojas Rojas

      Eliminar
    4. Si, efectivamete se mejoró con la version 4.6.1 - Gracias

      Eliminar
  12. Buenas noches a todos, muy bueno este blog para los que nos estamos iniciando en la facturación electrónica.

    Estoy 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.

    ResponderEliminar
  13. 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...

    ResponderEliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. gracias por tus interesantes aportes
    como se construye el Contrato.wsdl
    gracias

    ResponderEliminar
  16. Hola,

    No 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?

    ResponderEliminar
    Respuestas
    1. Estimado,

      Lo 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

      Eliminar