Skip to content

Library for reading and creating European-compliant electronic invoices (EN 16931)


Notifications You must be signed in to change notification settings


Repository files navigation

Build Status Latest Version Supported PHP Versions License Documentation


eInvoicing is a PHP library for creating and reading electronic invoices according to the eInvoicing Directive and European standard.

It aims to be 100% compliant with EN 16931 as well as with the most popular CIUS and extensions, such as PEPPOL BIS.


First of all, make sure your environment meets the following requirements:

Then, you should be able to install this library using Composer:

composer require josemmo/einvoicing


For a proper quick start guide, visit the documentation website at

Importing invoice documents

use Einvoicing\Exceptions\ValidationException;
use Einvoicing\Readers\UblReader;

$reader = new UblReader();
$document = file_get_contents(__DIR__ . "/example.xml");
$inv = $reader->import($document);
try {
} catch (ValidationException $e) {
    // Invoice is not EN 16931 complaint 

Exporting invoice documents

use Einvoicing\Identifier;
use Einvoicing\Invoice;
use Einvoicing\InvoiceLine;
use Einvoicing\Party;
use Einvoicing\Presets;
use Einvoicing\Writers\UblWriter;

// Create PEPPOL invoice instance
$inv = new Invoice(Presets\Peppol::class);
    ->setIssueDate(new DateTime('2020-11-01'))
    ->setDueDate(new DateTime('2020-11-30'));

// Set seller
$seller = new Party();
$seller->setElectronicAddress(new Identifier('9482348239847239874', '0088'))
    ->setCompanyId(new Identifier('AH88726', '0183'))
    ->setName('Seller Name Ltd.')
    ->setTradingName('Seller Name')
    ->setAddress(['Fake Street 123', 'Apartment Block 2B'])

// Set buyer
$buyer = new Party();
$buyer->setElectronicAddress(new Identifier('ES12345', '0002'))
    ->setName('Buyer Name Ltd.')

// Add a product line
$line = new InvoiceLine();
$line->setName('Product Name')

// Export invoice to a UBL document
header('Content-Type: text/xml');
$writer = new UblWriter();
echo $writer->export($inv);


These are the expected features for the library and how's it going so far:

  • Representation of invoices, parties and invoice lines as objects
  • Compatibility with the most used CIUS and extensions
  • Export invoices to UBL documents
  • Import invoices from UBL documents
  • Export invoices to CII documents
  • Import invoices from CII documents
  • Proper documentation