Factura Electrónica Argentina OPEN SOURCE [EDITADO]

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
Roberto Lopez
HMG Founder
Posts: 3979
Joined: Wed Jul 30, 2008 6:43 pm
Has thanked: 27 times
Been thanked: 167 times

Factura Electrónica Argentina OPEN SOURCE [EDITADO]

Post by Roberto Lopez » Sun Sep 08, 2019 1:45 am

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 53 times
Regards/Saludos,

Roberto


(Veritas Filia Temporis)

User avatar
danielmaximiliano
Posts: 2136
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Has thanked: 154 times
Been thanked: 23 times
Contact:

Post by danielmaximiliano » Mon Sep 09, 2019 2:35 pm

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

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. : +54901169026142
Telegram Name : DaNiElMaXiMiLiAnO

User avatar
IMATECH
Posts: 173
Joined: Sun May 27, 2012 9:33 pm
Location: Brazil: Goiânia-GO.
Has thanked: 1 time
Been thanked: 3 times

Post by IMATECH » 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
M., Ronaldo

By: IMATECH

Imation Tecnologia

Post Reply