youniwemi/digital-invoice
Composer 安装命令:
composer require youniwemi/digital-invoice
包简介
Digital Invoice is an easy wrapper around easybill/zugferd-php, josemmo/einvoicing and atgp/factur-x that will allow you generate Factur-x and UBL (Peppol, Cius...) invoices in a very easy way.
README 文档
README
Digital Invoice offers a unified interface for generating and reading e-invoices across all major formats. It wraps easybill/zugferd-php, josemmo/einvoicing, and atgp/factur-x into a single, consistent API.
Supported Formats
| Format | Profiles | Generate | Read |
|---|---|---|---|
| Factur-X / ZUGFeRD 2.x | MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED |
✓ | ✓ |
| ZUGFeRD 1.0 | CONFORT, BASIC, EXTENDED |
✓ | ✓ |
| XRechnung | — | ✓ | ✓ |
| UBL | Peppol, NLCIUS, CIUS-RO, CIUS-IT, CIUS-ES-FACE, CIUS-AT-NAT, CIUS-AT-GOV, Malaysia |
✓ | ✓ |
Installation
composer require youniwemi/digital-invoice
Generating an invoice
use DigitalInvoice\Invoice; use DigitalInvoice\CurrencyCode; use DigitalInvoice\FacturX; $invoice = new Invoice('INV-2024-001', new DateTime(), null, CurrencyCode::EURO, FacturX::BASIC); $invoice->setSeller('12345', '0002', 'ACME Corp', 'ACME'); $invoice->setSellerAddress('1 rue de la Paix', '75001', 'Paris', 'FR'); $invoice->setSellerTaxRegistration('FR12312345678', 'VA'); $invoice->setBuyer('', 'Client SARL'); $invoice->setBuyerAddress('2 avenue de la Gare', '69001', 'Lyon', 'FR'); $invoice->addItem('Consulting', 200.0, 20.0, 2); $invoice->addPaymentMean('58', 'FR7630006000011234567890189', 'ACME Corp'); $invoice->setPaymentTerms(new DateTime('+30 days'), 'Net 30'); // XML only $xml = $invoice->getXml(); // PDF with embedded XML (requires a blank PDF template) $pdf = $invoice->getPdf(file_get_contents('template.pdf'));
For UBL:
use DigitalInvoice\Ubl; $invoice = new Invoice('INV-2024-001', new DateTime(), null, CurrencyCode::EURO, Ubl::PEPPOL); // same setter API … $xml = $invoice->getXml();
Reading an invoice
InvoiceReader auto-detects the format (CII/FacturX, ZUGFeRD 1.0, UBL) and returns a normalised InvoiceData object.
use DigitalInvoice\InvoiceReader; // From XML string $data = InvoiceReader::fromXml($xml); // From PDF (extracts embedded CII/FacturX XML automatically) $data = InvoiceReader::read(file_get_contents('invoice.pdf'));
InvoiceData structure
$data->invoiceId; // string $data->issueDate; // ?DateTime $data->dueDate; // ?DateTime $data->currency; // string e.g. 'EUR' $data->profile; // string URN or format identifier $data->invoiceType; // string e.g. '380' $data->seller; // ?PartyData $data->buyer; // ?PartyData $data->buyerReference; // ?string $data->notes; // array [{content, subjectCode, contentCode}] $data->items; // InvoiceItemData[] $data->paymentMeans; // PaymentMeanData[] $data->paymentTermsDescription; // ?string // Monetary totals $data->taxBasisTotal; // ?float net amount (excl. VAT) $data->taxTotal; // ?float total VAT amount $data->grandTotal; // ?float total incl. VAT $data->duePayable; // ?float // Tax breakdown — one entry per rate/category $data->taxBreakdown; // TaxBreakdownData[]
TaxBreakdownData
$tb->rate; // float e.g. 20.0 $tb->basisAmount; // ?float taxable base for this rate $tb->calculatedAmount; // ?float VAT amount for this rate $tb->categoryCode; // ?string S, Z, E, AE, K … $tb->exemptionReason; // ?string
PartyData
$party->name; // string $party->tradingName; // ?string $party->id; // ?string legal/company ID value $party->idType; // ?string ISO 6523 scheme code e.g. '0002' $party->address; // ?AddressData (lineOne, postCode, city, countryCode …) $party->contact; // ?ContactData (name, phone, email) $party->taxRegistrations; // array [{id, schemeID}] e.g. VAT number $party->identifiers; // array [{id, idType}] additional IDs
Rendering an invoice to HTML
InvoiceRenderer turns any parsed InvoiceData into a self-contained HTML fragment with inlined CSS. It supports custom templates, custom CSS, and three UI languages out of the box.
use DigitalInvoice\InvoiceRenderer; $data = InvoiceReader::fromXml($xml); // Default (English) $html = (new InvoiceRenderer())->render($data); // French labels $html = (new InvoiceRenderer(lang: 'fr'))->render($data); // German labels $html = (new InvoiceRenderer(lang: 'de'))->render($data); // Custom template and/or CSS $html = (new InvoiceRenderer('/path/to/template.php', '/path/to/styles.css'))->render($data);
The default template (src/templates/invoice.html.php) and stylesheet (src/templates/invoice.css) can be replaced entirely. The template receives these variables:
| Variable | Type | Description |
|---|---|---|
$invoice |
InvoiceData |
The parsed invoice |
$cur |
string |
Currency code |
$labels |
array |
Translated UI strings |
$esc |
Closure |
fn(?string): string — HTML-safe output |
$fmt |
Closure |
fn(?float, string): string — formatted amount |
$date |
Closure |
fn(?\DateTime): string — formatted date |
$schemeLabel |
Closure |
fn(string): string — human label for ISO 6523 / tax scheme |
$formatLabel |
Closure |
fn(string): string — human label for invoice format/profile |
Interactive viewer
viewer.php provides a browser-based upload-and-preview page: upload any invoice file on the left, see the rendered HTML on the right. No files are stored server-side.
php -S localhost:8000
# open http://localhost:8000/viewer.php
Key Features
- Read & Generate — round-trip support for all formats
- Tax breakdown — per-rate base amount, VAT amount, and category code from any parser
- HTML rendering — self-contained fragment with inlined CSS, i18n (EN/FR/DE), format badge, SIRET/VAT labels
- Identifier support — SIRET, SIREN, DUNS, LEI, VAT, and 60+ ISO 6523 codes
- Multi-currency — including MYR for Malaysian e-invoices
- Secure by default — DOCTYPE guard, LIBXML_NONET, upload MIME validation, XSS-safe renderer
Development Status
Active development — API may change between minor versions.
Collaboration and contributions are welcome. Open an issue or PR for specific use cases or format requests.
Contributors
- @yassiNebeL — UBL format support via josemmo/einvoicing
Credits
- easybill/zugferd-php — Factur-X, XRechnung, ZUGFeRD generation and reading
- josemmo/einvoicing — UBL invoice generation and reading
- atgp/factur-x — PDF embedding/extraction for Factur-X
- Tiime-Software/EN-16931 — Structured data types for e-invoicing
youniwemi/digital-invoice 适用场景与选型建议
youniwemi/digital-invoice 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.98k 次下载、GitHub Stars 达 7, 最近一次更新时间为 2023 年 11 月 11 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「invoice」 「ZUGFeRD」 「ubl」 「e-invoicing」 「digital invoice」 「factur-x」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 youniwemi/digital-invoice 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 youniwemi/digital-invoice 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 youniwemi/digital-invoice 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A PHP wrapper for UBL invoices
..
Easy invoice generation using Laravel Eloquent
An unofficial PHP library for generating ZATCA Fatoora e-invoices. This library facilitates the creation of compliant e-invoices, QR Codes, and certificates, as well as the submission of e-invoices to ZATCA's servers. It provides developers with an easy-to-use, customizable, and robust toolkit to in
XML generator for ZUGFeRD / Factur-X / XRechnung written in PHP. Convert PHP Objects to XML and back.
Peppyrus PHP API client
统计信息
- 总下载量: 1.98k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 8
- 点击次数: 43
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-11-11