mariodevv.com
Proyectos
Open Source Producción

PHP FacturaE

Librería PHP open-source para generar, firmar y exportar facturas electrónicas FacturaE. API fluent, firma XAdES-EPES, cero dependencias.

PHPFacturaEXAdES-EPESXML/XSDOpenSSL
Ver repositorio →

6 líneas. Una factura firmada.

Invoice::create('FAC-001')
->seller(Party::company('B12345678', 'Mi Empresa S.L.'))
->buyer(Party::person('12345678Z', 'Laura', 'Gómez', 'Ruiz'))
->line('Diseño logotipo', price: 450.00, vat: 21)
->sign(Signer::pfx('certificado.pfx', 'password'))
->export('factura.xsig');

Eso es PHP FacturaE. Facturación electrónica en PHP, sin complicaciones.

Sin configuraciones interminables. Sin dependencias externas. Sin semanas de desarrollo.


El problema que resuelve

Las empresas españolas están obligadas a emitir facturas electrónicas para la AEAT y FACe. Integrar eso en una aplicación web suele costar semanas: especificaciones densas, certificados digitales, y XML que nadie quiere escribir a mano.

PHP FacturaE lo reduce a una tarde.

Lo construí porque en AtlanTIC Systems necesitábamos facturación electrónica para varios proyectos — ERPs, SaaS, integraciones con administraciones públicas — y no existía nada en PHP que fuera moderno, tipado y fácil de usar.


Todos los escenarios fiscales

IVA, IGIC para Canarias, retenciones de IRPF, recargo de equivalencia, exenciones… Cada caso fiscal resuelto con un método claro:

->line('Producto', price: 100, vat: 21)
->line('Servicio profesional', price: 500, vat: 21, irpf: 15)
->line('Producto canario', price: 100, igic: 7)
->line('Joyería', price: 200, vat: 21, surcharge: 5.2)
->exemptLine('Formación', price: 2000, reason: 'Art. 20.Uno.9')

29 tipos impositivos cubiertos. El desarrollador escribe lo que sabe del negocio, la librería genera el XML correcto.


Empresas, autónomos y extranjeros

// Empresa española
Party::company('B12345678', 'Empresa S.L.')
->address('C/ Mayor 10', '28013', 'Madrid', 'Madrid')
// Autónomo
Party::person('12345678Z', 'Laura', 'Gómez', 'Ruiz')
->address('C/ Sol 3', '28012', 'Madrid', 'Madrid')
// Empresa extranjera
Party::company('FR12345678901', 'Entreprise SAS')
->address('12 Rue de la Paix', '75002', 'Paris', 'Île-de-France', 'FRA')

También soporta facturación a la Administración Pública con centros administrativos FACe (DIR3).


Firma digital en una línea

La parte más compleja de FacturaE — certificados, XAdES-EPES, canonicalización XML — resuelta en una llamada:

->sign(Signer::pfx('certificado.pfx', 'password'))

Compatible con certificados PKCS#12 y PEM. Opción de sellado de tiempo (TSA) para validez a largo plazo.


Pagos fraccionados

Transferencia, tarjeta, domiciliación, efectivo… y pagos a plazos automáticos:

->splitPayments(
method: PaymentMethod::Transfer,
installments: 3,
firstDueDate: '2025-04-01',
intervalDays: 30,
iban: 'ES91 2100 0418 4502 0005 1332',
)

19 métodos de pago. Reparto automático de céntimos en el último plazo.


Facturas rectificativas

Correcciones con motivo legal y periodo fiscal, todo tipado con enums:

->corrects(
invoiceNumber: 'FAC-001',
reason: CorrectionReason::TaxableBase,
method: CorrectionMethod::FullReplacement,
periodStart: '2025-01-01',
periodEnd: '2025-03-31',
)

22 motivos de corrección oficiales.


Lo que incluye

29 impuestosIVA, IGIC, IRPF, recargo de equivalencia, exenciones…
19 métodos de pagoTransferencia, tarjeta, domiciliación, efectivo, plazos…
Firma digitalXAdES-EPES con PKCS#12, PEM y sellado de tiempo
Rectificativas22 motivos de corrección + periodo fiscal
AdjuntosPDFs, contratos o documentos embebidos en la factura
Validación oficialFacturaE 3.2, 3.2.1 y 3.2.2
Facturación a AAPPCentros administrativos FACe (DIR3)

Rendimiento

1 factura~0.2 ms
100 facturas~22 ms

Cero dependencias externas. Solo PHP estándar (ext-openssl + ext-dom).


Decisiones técnicas

PHP FacturaE no es un wrapper sobre otra librería. Lo diseñé desde cero con una arquitectura limpia:

  • API fluent con inmutabilidad — Cada método devuelve self, pero el estado interno usa readonly properties donde es posible.
  • Enums nativos de PHP 8.2 — Nada de constantes sueltas ni arrays asociativos. Los 29 impuestos, 19 métodos de pago y 22 motivos de corrección son enums tipados.
  • Validación automática — El XML se valida contra los esquemas XSD oficiales antes de exportar. Si algo falta, la excepción dice exactamente qué.
  • Firma XAdES-EPES — Implementación propia sin librerías externas, con soporte de sellado de tiempo RFC 3161.
  • PHPStan nivel 8 — Análisis estático al máximo nivel en todo el código fuente.

Open Source

PHP FacturaE es código abierto bajo licencia MIT.

Terminal window
composer require php-facturae/php-facturae

Ver en GitHub · Documentación completa