Cómo generar facturas electrónicas usando PHP

En los países de Latinoamérica se está produciendo una migración hacia la facturación electrónica (dejando de lado las viejas facturas de papel).

Más allá de aspectos políticos, es una muy buena noticia por, al menos, los siguientes motivos:

  1. Las operaciones comerciales se realizarán mucho más eficientemente
  2. Se limitará muchísimo la economía informal y todos los problemas que de ella se derivan
  3. Dará mucho trabajo a muchos programadores 🙂

Sobre este último punto, veo que a muchos colegas se les complica un poco el tema de integrar sus sistemas con aquellos de la autoridad central de su país, así que decidí hacer este pequeño compendio de las librerías que hay disponibles como para acortar un poco el camino.

Cómo generar facturas electrónicas para Argentina

En el caso de Argentina, la autoridad central es la AFIP.

La generación de facturas electrónicas se realiza mediante un WebService de tipo SOAP (La documentación oficial se puede consultar acá).

Una clase que ya está implementada para hacer esto es la que desarrolló Ivan Muñoz.

El código completo se encuentra en GitHub y mirando un poco, también hay un SDK para PHP que contiene esta librería y otras.

Disclaimer: no probé su funcionamiento con lo cual no puedo dar garantías (¡Si tenés alguna experiencia y querés compartirla en los comments te lo agradezco!).

Algunas observaciones de mirar el código nomás:

  • Está preparada para operar con composer
  • Podría tener mejores ejemplos
  • El código podría emprolijarse un poco (Usa notación de PHP 4, accede al php.ini desde la clase, etc…)

La gente de BitIngenieria ha desarrollado también librerías para conectarse a diferentes organismos públicos (Entre ellos AFIP). Ahí podés encontrar mucho código listo para usar… sólo que es pago.

Cómo generar facturas electrónicas para México

En el caso de México, se puede usar el código publicado en http://www.lacorona.com.mx/fortiz/sat/codigo.php#intro por Fernando Ortiz.

Es interesante cómo está presentado, no sólo el código fuente si no también el esquema de requests que deben hacerse para lograr el objetivo.

Mirando el código simplemente veo:

  • Está escrito en modo procedural (En lugar de Orientado a Objetos)
  • El código podría estar mejor estructurado (Usa variables globales, incluye archivos dentro de funciones, etc…)
  • Usa SimpleXMLElement para procesar el XML
  • Tiene muy buena documentación
  • Es muy completo (Cubre una gran cantidad de casos)

Tal vez no sería el que yo elegiría para implementar en forma directa, pero ciertamente es un excelente punto de partida.

Cómo generar facturas electrónicas para Perú

Aquí hay un tutorial interesante que explica paso a paso cómo hacer facturas electrónicas para Perú utilizando el webservice del SUNAT.

No es exactamente lo que buscaba (Un SDK escrito en PHP), pero es un buen comienzo.

La gente de NubeFact tiene una oferta para desarrolladores PHP (O para cualquiera bah) basada en un WebService REST propio (Que internamente se comunica con el WebService SOAP de SUNAT).

Queda simplemente consumir el WebService REST de ellos (Y pagar por el servicio, claro… ojo que hasta 50 facturas diarias es gratis… para pensarlo).

Cómo generar facturas electrónicas para Costa Rica

Para el caso de Costa Rica tenemos esta API desarrollada por la comunidad CRLibre que permite comunicarse de forma simple con el Ministerio de Hacienda de Costa Rica.

Su objetivo es ser un middleware que haga menos engorroso el desarrollo de este tipo de sistemas (Mostrando al desarrollador una cara más amigable).

Por lo que parece no tiene aún un cliente de PHP (¡Vaya ironía!) pero parece un proyecto muy interesante y bien armado.

Mirando un poco el código veo que también podría emprolijarse un poco (Hacerlo más acorde al paradigma de objetos, sacando referencias a variabels globales, etc…).

Otro proyecto interesante que está disponible es Faktur-PHP-SDK desarrollado por una persona (o personas) llamada OpenCode506.

No lo he probado funcionando, pero ya de ver el código me gusta bastante más que los otros que he comentado.

Los puntos interesantes que le veo:

  1. Pide PHP 5.6 o superior (Ya implementa Namespaces por ejemplo)
  2. Viene con tests unitarios incorporados
  3. Está preparado para usarse vía composer

Lo que podría ser un poco mejor es la documentación.

Cómo generar facturas electrónicas para Uruguay

Para el caso de Uruguay no encontré una implementación libre de facturas electrónicas… lo que vi es la documentación oficial y a través de una sesión de consulta conocí de la existencia de la empresa Sisnet que ofrece un middleware, sólo que hay que pagar por el servicio (y luego usar su webservice).

Cómo generar facturas electrónicas para Chile

Si tenés que generar facturas electrónicas para Chile podés usar la librería LibreDTE que desarrolló la gente de Sasco.

A simple vista el proyecto parece sólido.

Cumple con las caraterísticas básicas que tanto me gustan:

  1. Se puede instalar usando Composer
  2. Está muy bien documentada
  3. El código es moderno (Usa namespaces al menos)
  4. Tiene sus tests unitarios incorporados

Cómo generar facturas electrónicas para España

Por último, aunque estaba buscando sólo para LatinoAmérica, me crucé con una implementación de FacturaE para PHP desarrollada por José Miguel Moreno (Acá se puede ver el código).

En resumen

Habrás notado que, si bien cada país implementa su propia forma de Factura electrónica y por lo tanto se requiere una librería en particular, todas se basan en el mismo principio:

  1. Una entidad gubernamental expone un servicio web (Usualmente SOAP)
  2. La librería consume dicho servicio mostrando una API mucho más sencilla y amigable a los desarrolladores de a pié

Con lo cual: si te encuentras en la situación de tener a mano una librería desarrollada para la facturación electrónica de tu país ¡úsala! En caso contrario (O que no te satisfaga completamente) para implementarla necesitará conocer cómo interactuar con WebServices en PHP.

Si buscas ayuda sobre esto este curso puede serte útil.

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a afinar sus habilidades técnicas y avanzar en sus carreras

4 comentarios

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.