domingo, 18 de marzo de 2018

Facturacion Electronica con C# y Java


Si estas en Ecuador y quieres implementar la facturación electrónica en tu aplicación de Visual Studio, comprobarás que la documentación y las herramientas son un poco tediosas de buscar en la web.

¿Por dónde empezar?

Debes considerar algo tan simple como los siguientes resúmenes de los resúmenes que he investigado:

  1. La "factura electrónica" es un fichero XML firmado digitalmente.
  2. Lo mas fácil es tener que generar ese XML sin firmar.
  3. Se complica un poco al firmar XAdES-BES (aunque de hecho es el estándar mas básico)
  4. Se complica un poco si no conoces Java y deseas utilizar la librería MITyC (Ministerio de Industria, Energía y Turismo del gobierno de España)
  5. El punto 4 lo he visto por todas partes en Ecuador, así que creo que la mayoría del país la usa.
  6. Se complica un poco integrar C# y Java
  7. Es sencillo consumir un webservice del SRI desde C#
  8. Si llegaste hasta el punto 7 nose que haces leyendo este blog.
¿Que sigue?
Si no lograste llegar hasta el punto 8 entonces deberías leer lo que sigue:

  1. Para poder firmar el XML, necesitas un certificado digital expedido por una entidad certificadora reconocida en el País.
  2. Una vez tengas el certificado (fichero en formato *.cer para el caso de Ecuador) lo siguiente es el tema de la firma XAdES-BES, lo cual para el caso de los proyectos en Visual Studio, una de las soluciones mas comunes es complicarse con java.
  3. Una busqueda rapida en internet te dara las librerias MITyC las cuales estan escritas en java.
  4. Otra busqueda rapida en internet te dara un ejemplo sencillo de como usar esta libreria para firmar un documento xml.
  5. De aquí viene varias alternativas, para este blog solo mencionare una:
  • Crear un programa java que reciba parámetros de entrada ( como por ejemplo: rutas,archivo xml,certificado,claves,etc) y devuelva el resultado de lo firmado y después usar IKVM.NET para convertir ese programa en un dll para luego referenciarlo en el proyecto de Visual Studio.

En las ayudas de IKVM.NET se muestra como realizar paso a paso vía comando y de forma sencilla esta solución. Para referenciar el objeto dll en el proyecto de C# se lo realiza de la siguiente manera:

using packappjava.com; //esta es la ruta de los package java que contiene la clase

class Program
{
static void Main(string[] args)
        {
            AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly;
            AppJava leer = new AppJava(); // este es la clase principla de java
// aqui en adelante va el codigo para enviar y recibir la respuesta de la firma

        }

        static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
        {
            return Assembly.LoadFile(@"C:\IKVM.OpenJDK.Core.dll"); // esta es la ruta del core OpenJDK
        }
 }

  • Una vez superado el paso 5 ya lo que falta no es nada complejo. Consumir el Webservice del SRI se lo puede realizar de la siguiente forma:
String envelop = "\"http://schemas.xmlsoap.org/soap/envelope/\"";
String action = "\"http://ec.gob.sri.ws.recepcion/\"";

byte[] archxml = File.ReadAllBytes(ruta); // ruta del archivo xml firmado
String base64arch = Convert.ToBase64String(archxml);

string xml = @"<soapenv:Envelope xmlns:soapenv=" + envelop + " xmlns:ec=" + action + ">";
xml = xml + "<soapenv:Header/>";
xml = xml + "<soapenv:Body>";
xml = xml + "<ec:validarComprobante>";
xml = xml + "<xml>" + base64arch + "</xml>";
xml = xml + "</ec:validarComprobante>";
xml = xml + "</soapenv:Body>";
xml = xml + "</soapenv:Envelope>";

byte[] bytes = Encoding.ASCII.GetBytes(xml);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //url del webservice SRI

request.Method = "POST";
request.ContentLength = bytes.Length;
request.ContentType = "text/xml";

Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();

Para finalizar solo brindar mi opinión recalcando que el esquema de comprobantes electrónicos es un importante proyecto orientado a la responsabilidad social, ambiental y tributaria. Se obtiene mayor agilidad, simplificación de gestión; otorga integridad y seguridad desde la emisión, entrega y archivado de los comprobantes.

Espero que este post haya sido de mucha ayuda.







2 comentarios:

Unknown dijo...

Auxilio...... en donde y cómo generó
El ride

Unknown dijo...

Estoy enviando al SRI en ambiente de prueba y al ejecutar el codigo, no dice si ha sido exitoso o no. Me podria ayudar agregando lo necesario para darle una respuesta al usuario. Muchas gracias.