Factura Electrónica Argentina OPEN SOURCE [EDITADO]

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
Roberto Lopez
HMG Founder
Posts: 4004
Joined: Wed Jul 30, 2008 6:43 pm

Factura Electrónica Argentina OPEN SOURCE [EDITADO]

Post by Roberto Lopez »

Hola,

Hace tiempo estoy investigando este tema y a principios de año, desarrollé mi primera aplicación que emite facturas electrónicas en HMG.

Lo hice con un componente comercial, que si bien me dio los resultados esperados, a medida que me fui metiendo más en el tema, me di cuenta que tiene algunas limitaciones.

Empecé a investigar alternativas y me encontré con el proyecto AFIP SDK. Una librería escrita en PHP y con licencia MIT.

En principio, al estar escrita en PHP, pensé que no era útil para mis aplicaciones desarrolladas en HMG, peeeeroooo... siempre hay algo más, cuando uno lo piensa bien :)

Entonces instalé XAMPP, corrí el demo localmente y funcionó.

El paso siguiente, sería correr el script que genera la factura desde HMG usando HBTIP.

Antes de intentar hacerlo, la idea dejó de gustarme, por ser demasiado compleja, entonces, recordé, que PHP puede correr scripts directamente desde la línea de comando de Windows.

Bajé la versión portable de PHP (la que viene en un zip) y la reduje solo a los componentes necesarios para correr mi script, configuré las extensiones requeridas (openssl y soap) e hice la prueba:

Code: Select all

php myscript.php
Y funcionó nuevamente, para mi sorpresa, bastante más rápido que el componente comercial que estaba usando (OCX/DLL).

Para usarlo desde HMG, puede hacerse con EXECUTE... WAIT

Para obtener los resultados del comando (CAE, Nro. de Factura y vencimiento) deberíamos redireccionar la salida del comando a un archivo:

Code: Select all

php myscript.php > respuesta.txt
Obviamente, el script debería parametrizarse para enviarle los datos del cliente, importes, etc..En los demos, esa información está como literal (lo cual sirve a los efectos de prueba).

Otra alternativa sería generar el script desde nuestra aplicación, conteniendo los datos requeridos para cada factura.

El archivo adjunto, contiene todo lo necesario (solo 3.5 MB).

Para probarlo deben reemplazar los archivos src/Afip_res/cert y src/Afip_res/key por su clave y certificado de homologación (para probar).

En los demos, el CUIT emisor, debe reemplazarse por el que corresponda.

Existen infinidad de tutoriales que explican como obtener la clave y el certificado de homologación.

Publico esto como retribución, a todos los que me han ayudado y orientado aquí con este tema.

Muchas Gracias.

Espero que les sea de utilidad.

https://github.com/afipsdk/afip.php

https://www.php.net/

EDIT: Descubrí que php.exe no solo puede interpretar scripts, sino que incluye un servidor web, que podríamos invocar (por ejemplo) de esta forma:

Code: Select all

php -S 127.0.0.1:60123
Obviamente, el puerto, puede ser cualquier otro que no esté siendo usado.

Por lo tanto, ahora, desde nuestro navegador, podríamos ejecutar un script (en este caso, uno que genera una factura A) de la siguiente forma:

Code: Select all

http://127.0.0.1:60123/factura_a.php
A partir de este descubrimiento, la idea que me pareció muy compleja antes (la de usar un servidor web) se volvió mucho más sencilla.

Desde nuestro programa en HMG, podríamos hacer lo siguiente:

Code: Select all

   oHttp := TIPClientHTTP():new( "http://127.0.0.1:60123/factura_a.php" )

   IF ! oHttp:open()
      msgstop( "error:" + oHttp:lastErrorMessage())
      RETURN
   ENDIF

   cRes   := oHttp:readAll()
   oHttp:close()

   msginfo(  cRes )
Por lo tanto, tendríamos en la variale 'cRes', el resultado de nuestro script (Nro. de comprobante, CAE y fecha de vencimiento) sin tener que ejecutar programas externos, ni generar archivos con la respuesta.

Las dos soluciones (ejecutar PHP como programa externo o esta) son muy rápidas (no se percibe ninguna diferencia en la velocidad de ejecución) pero, seguramente, esta es más elegante :D
Attachments
factura_electronica_argentina.7z
(3.35 MiB) Downloaded 287 times
Regards/Saludos,

Roberto


(Veritas Filia Temporis)
User avatar
danielmaximiliano
Posts: 2611
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Factura Electrónica Argentina OPEN SOURCE!

Post by danielmaximiliano »

Gracias como Roberto !!!!.
no soy usuario de FE pero esta bueno leerun poco para matar el tiempo...
un abrazo!
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
IMATECH
Posts: 188
Joined: Sun May 27, 2012 9:33 pm
Location: Brazil: Goiânia-GO.

Re: Factura Electrónica Argentina OPEN SOURCE!

Post by IMATECH »

Congrats Roberto :-)

In Brazil we have a similar project from over 10 years ago
*communists make this to have more control over brazilian companies. Then the politics can stole them with more knowledge.

Here we need to consume a web service to send/receive data using signed XML files (A3+ secury key needed too)
In the end we can have a valid eletronic document to replace old doc's (like in Factura Electronica)

To sign files you can use: MS WinCyipt (Token/File Key), OpenSsl (File Key) or the old MS Capicom (Token/File Key)
Look at this project (open source), think you can use it for an Argentina version
https://github.com/JoseQuintas/sefazcla ... zclass.prg

Regards
M., Ronaldo

By: IMATECH

Imation Tecnologia
User avatar
Roberto Lopez
HMG Founder
Posts: 4004
Joined: Wed Jul 30, 2008 6:43 pm

Re: Factura Electrónica Argentina OPEN SOURCE!

Post by Roberto Lopez »

IMATECH wrote: Mon Sep 09, 2019 9:38 pm Congrats Roberto :-)

In Brazil we have a similar project from over 10 years ago
*communists make this to have more control over brazilian companies. Then the politics can stole them with more knowledge.

Here we need to consume a web service to send/receive data using signed XML files (A3+ secury key needed too)
In the end we can have a valid eletronic document to replace old doc's (like in Factura Electronica)

To sign files you can use: MS WinCyipt (Token/File Key), OpenSsl (File Key) or the old MS Capicom (Token/File Key)
Look at this project (open source), think you can use it for an Argentina version
https://github.com/JoseQuintas/sefazcla ... zclass.prg

Regards
Thanks for your help.

My basic problem now is that I don't have enough available time to research about this, that is the reason because I'm using a 'ready to use' third party component.

'Construct' the xml files with invoices and customers info is not the main problem (tedious and large, but not difficult :) ) but the authentication/signing is.

Anyway I'll try to 'make' some time to do it, since I feel 'at home' with xBase (I don't like PHP at all :) ).
Regards/Saludos,

Roberto


(Veritas Filia Temporis)
Post Reply