PHP FacturaE
Librería PHP open-source para generar, firmar y exportar facturas electrónicas FacturaE. API fluent, firma XAdES-EPES, cero dependencias.
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ñolaParty::company('B12345678', 'Empresa S.L.') ->address('C/ Mayor 10', '28013', 'Madrid', 'Madrid')
// AutónomoParty::person('12345678Z', 'Laura', 'Gómez', 'Ruiz') ->address('C/ Sol 3', '28012', 'Madrid', 'Madrid')
// Empresa extranjeraParty::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 impuestos | IVA, IGIC, IRPF, recargo de equivalencia, exenciones… |
| 19 métodos de pago | Transferencia, tarjeta, domiciliación, efectivo, plazos… |
| Firma digital | XAdES-EPES con PKCS#12, PEM y sellado de tiempo |
| Rectificativas | 22 motivos de corrección + periodo fiscal |
| Adjuntos | PDFs, contratos o documentos embebidos en la factura |
| Validación oficial | FacturaE 3.2, 3.2.1 y 3.2.2 |
| Facturación a AAPP | Centros 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 usareadonlyproperties 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.
composer require php-facturae/php-facturae