Imprimir
Categoría: Factura Electrónica - AFIP Argentina
Visto: 4255

En esta sección se incluyen los detalles para emplear los Web Services de Facturación Electrónica de la AFIP.

Introducción

Nuestro sistema estaba desarrollado en Powerbuilder 7. Esa versión no tiene ningún soporte para Web Services y tampoco ninguna librería criptográfica. Por eso, tuvimos que solucionar los siguientes problemas técnicos por nuestra cuenta:

Para el desarrollo utilizamos la librería criptográfica OpenSSL. Me costo un poco obtener ejemplos, por ese motivo, en este wiki agregue una página que describe qué funciones de la librería utilizar para realizar las tareas anteriores.

OpenSSL viene compilada con la calling convention de C, por lo que tuvimos que armar una DLL que actuara como wrapper entre OpenSSL y Powerbuilder, ya que este ultimo solo soporta la calling convention de Pascal (que también utilizada por la API de Windows).

Por otro lado, como PowerBuilder tiene poco soporte para cadenas binarias, decidimos que el wrapper solo iba a enviar y recibir texto en Base64. De esta manera, podíamos utilizar string terminados en nulls como parámetros y me ahorraba trabajo al manipular los datos en Powerbuilder.

Notas de Diseño

Una de las primeras decisiones que tomamos fue que la llamada al WS se iba a realizar cada vez que se quisiera imprimir un comprobante que necesitara CAE y no lo tuviera. Esto tiene la ventaja de ser transparente para el usuario, pero presenta el inconveniente que cada una de las maquinas que pueden facturar tienen que estar configuradas para acceder a los Web Services.

Otra forma de implementarlo es crear un deamon que se ocupe de conectarse a la AFIP y obtener los CAEs. Nosotros teníamos poco experiencia desarrollando este tipo de aplicaciones, por lo que nos inclinamos por la primera opción.

Otro tema a tener en cuenta es separar el proceso de facturación de la obtención del CAE, para que al ocurrir un error con el comprobante no nos quedemos con un CAE que pertenece a un comprobante inexistente. Aunque a nosotros no nos paso, una prépaga decidió implementar ambos procesos en una transacción SQL y se le presento este problema.

Sincronización de Relojes

Las computadoras que emitirán comprobantes electrónicos deben tener sus relojes sincronizados a través del protocolo NTP con el servidor time.afip.gov.ar.

En el sitio http://nettime.sourceforge.net/ se encontrarán las instrucciones para realizar esto en WinXP y Win2000. También se podrá descargar un cliente gratuito para las restantes versiones de Windows que no poseen soporte para NTP integrado.

Instalación de los Certificados Digitales

En cada una de las máquinas que se conectaran a la AFIP se debe instalar el certificado digital de la autoridad certificante de la AFIP. Esto es necesario para poder establecer la conexión HTTPS.

Para ello se deben realizar los siguientes pasos:

Si se quiere revisar que el certificado este instalado correctamente se puede ejecutar c:\windows\system32\certmgr.msc.

Resulta conveniente instalar en algunas máquinas el certificado digital de la autoridad certificante del ambiente de homologación, ya que eso permitirá utilizar el ambiente de prueba de facturación electrónica que posee la AFIP.

Servidores de la AFIP

Entorno de Producción

WebService WSAA (URL): https://wsaa.afip.gov.ar/ws/services/LoginCms
Webservice WSFE (URL): https://servicios1.afip.gov.ar/wsfe/service.asmx

Entorno de Homologación

WebService WSAA (URL): https://wsaahomo.afip.gov.ar/ws/services/LoginCms
Webservice WSFE (URL): https://wswhomo.afip.gov.ar/wsfe/service.asmx

Los datos anteriores los hicimos parametrizables, por si en algún momento la AFIP decide cambiarlos. Además eso nos permitió hacer que el sistema apuntara a Producción solamente si era corrido en la base de Producción de nuestros clientes. Como la mayoría no tienen un departamento de Sistemas, de esa manera, nos evitamos que por error generen un CAE para un comprobante del ambiente de test.

Los ejemplos que incluyo en este sition son todos del ambiente de homologación

Generación del certificado de la empresa que se consumirá los WS

El siguiente proceso se deberá realizar para cada uno de los entes que posee la organización, si están inscriptos en la AFIP en forma separada. Cada una de las organizaciones que requieran conectarse a las computadoras de la AFIP necesitan un certificado propio.

En nuestro sistema, el certificado generado y la clave privada se guardaban en un directorio compartido. Pero lo ideal es que se almacene en la base de datos, ya que ambos archivos solo contienen texto en formato base64.

serialNumber=CUIT 20305949125,CN=NuestroSistema,OU=Facturacion,O=UnaPrepaga,ST=Capital Federal,C=AR

Donde CN es el nombre del sistema que emite los comprobantes, OU es el sector o departamento de la organización, O es el nombre de la organizaciòn y ST es la provincia.

En nuestro caso, realizamos los pasos anteriores utilizando la libreria OpenSSL.

Para el ambiente de homologación, es necesario generar el request y enviárselo a algún miembro del área de Seguridad Informatica - Autentificación y Autorizacion. Ellos nos devolverán el certificado de la AFIP que nos permitirá conectarnos a los WS.

Verificación del estado de los Web Services

Para esto utilizamos el Web Service Dummy (FEDummy) que resultó muy fácil de implementar y muy útil para diagnosticar problemas con el WS. Si el request a este WS funciona nos estamos asegurando:

Proceso para Obtener el CAE

Existen otros Web Services pero para emitir comprobantes electrónicos, solo necesitamos los anteriores (01/06/2008).

Notas sobre el codigo XML de las paginas de Facturación Electrónica