Este es un pequeño compilado en .JAR que te permite inyectar las firmas Xades-EPES a tus XML, las facturas firmadas por esta aplicación ya fueron testeadas con éxito utilizando el api que provee el Ministerio de Hacienda de Costa Rica. A continuación, voy a documentar un poco su manera de uso, el entorno que necesitan y como pueden probarlo localmente y en sus aplicaciones PHP, Python, Ruby y Node.js.
Básicamente como la aplicación está desarrollada en Java usando Maven , lo que necesitan es tener instalados en sus servidores el JAVA (https://www.java.com/en/download/) y JRE java runtime enviroment (http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) . Nada más asegúrense configurar las variables de entorno globales para que sus terminales puedan reconocerles los comandos JAVA.
PD: Si escriben “java -version” en la consola cmd (Windows) o terminal(Linux,mac) y les aparece la versión de java entonces configuraron bien las variables de entorno.
El repositorio contiene dos carpetas, la primera llamada “compilado” es donde esta nuestro archivo ejecutable y el compilado de clases que necesita para funcionar. La segunda es completamente opcional se llama “recursos”, en ella van a encontrar una demo de una factura sin firmar en formato .xml para que puedan hacer sus pruebas.
En esta carpeta de recursos podrían guadar sus archivos de extensión .p12(La llave criptográfica que descargar del atv de hacienda) para leerla, y también podrían usarlo para almacenar sus facturas firmadas.
Teniendo ya configurado java y las variables de entorno en nuestro servidor o computadora personal , además habiendo descargado nuestra llave criptográfica.p12 podemos proceder a firmar los documentos.
Para ejecutarlo y testearlo localmente abrimos la consola cmd(Windows) o la terminal (Linux , Apple) y ejecutamos lo siguiente.
java -jar ../ruta_personalizada/compilado/firmar-xades.jar
Este primer comando ejecuta la aplicación, por __ruta_personalizada me refiero a que ubiquen donde clonaron o descargaron este repositorio dentro de la carpeta FirmaXadesEpes__.
Ahora, les va a dar una excepción por que nuestra aplicación recibe 4 parametros:
En este sentido el comando completo seria:
java -jar ../ruta_personalizada/compilado/firmar-xades.jar ../ruta_personalizada/cert.p12 9865 ../ruta_personalizada/demo-factura.xml ../ruta_personalizada/ demo-factura-firmada.xml
Si todo sale bien , el archivo demo-factura-firmada.xml debería estar en donde le indicamos en el cuarto parámetro.
<?php shell_exec("java -jar ../ruta_personalizada/compilado/firmar-xades.jar ../ruta_personalizada/cert.p12 9865 ../ruta_personalizada/demo-factura.xml ../ruta_personalizada/demo-factura-firmada.xml");
import subprocess subprocess.call(['java', '-jar', '../ruta_personalizada/compilado/firmar-xades.jar' , ‘../ruta_personalizada/cert.p12’ , ‘9856’ , ‘../ruta_personalizada/demo-factura.xml’, ‘../ruta_personalizada/demo-factura-firmada.xml’])
IO.popen( [ 'java', '-jar', '../ruta_personalizada/compilado/firmar-xades.jar,"#{ ../ruta_personalizada/cert.p12}", "#{9856}", “#{../ruta_personalizada/demo-factura.xml}” ,”#{ demo-factura.xml ../ruta_personalizada/demo-factura-firmada.xml}” , {SDTERR=>STDOUT} ]
var exec = require('child_process').exec, child; child = exec('java -jar ../ruta_personalizada/compilado/firmar-xades.jar ../ruta_personalizada/cert.p12 9865 ../ruta_personalizada/demo-factura.xml ../ruta_personalizada/demo-factura-firmada.xml', function (error, stdout, stderr){ console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if(error !== null){ console.log('exec error: ' + error); } });
jonh.m.10@gmail.com