1. Go to this page and download the library: Download taiwanleaftea/tlt-verifactu library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Taiwanleaftea\TltVerifactu\Support\Facades\VatValidator;
// Offline validation by format
echo VatValidator::formatValid('ES', 'B12345678');
// Online validation via the VIES service
$response = VatValidator::online('ES', 'B12345678');
if ($response->success) {
// VAT number is present in the VIES database
echo $response->valid;
// Data returned from the VIES database (varies per country)
echo $response->vatNumber;
echo $response->countryCode;
echo $response->requestDate;
echo $response->name;
echo $response->address;
} else {
foreach ($response->errors as $error) {
echo $error . PHP_EOL;
}
}
use Illuminate\Support\Carbon;
use Taiwanleaftea\TltVerifactu\Classes\Certificate;
use Taiwanleaftea\TltVerifactu\Classes\LegalPerson;
use Taiwanleaftea\TltVerifactu\Classes\Recipient;
use Taiwanleaftea\TltVerifactu\Enums\EstadoRegistro;
use Taiwanleaftea\TltVerifactu\Enums\ExemptOperationType;
use Taiwanleaftea\TltVerifactu\Enums\IdType;
use Taiwanleaftea\TltVerifactu\Enums\InvoiceType;
use Taiwanleaftea\TltVerifactu\Enums\OperationQualificationType;
use Taiwanleaftea\TltVerifactu\Enums\RejectionStatus;
use Taiwanleaftea\TltVerifactu\Exceptions\CertificateException;
use Taiwanleaftea\TltVerifactu\Support\Facades\Verifactu;
$certificate = new Certificate('certificate.p12', 'password');
$issuer = new LegalPerson('XYZ SA', 'A12345678', 'ES', IdType::NIF);
$recipient = new Recipient('ABC SL', 'B12345678', 'ES', IdType::NIF);
Verifactu::config($certificate);
$previous = [
'number' => '2025/1',
'date' => Carbon::createFromFormat('Y-m-d', '2025-01-10'),
'hash' => '8B709172FA124AC15D8F8570F941EBA70F99088628D4A59BF675627A7E250F15',
];
$invoice = [
'number' => '2025/2',
'date' => Carbon::createFromFormat('Y-m-d', '2025-01-12'),
'description' => 'Invoice description',
'type' => InvoiceType::STANDARD,
'amount' => 121,
'base' => 100,
'vat' => 21,
'rate' => 21,
];
try {
$result = Verifactu::submitInvoice(
issuer: $issuer,
invoiceData: $invoice,
options: [], // 'exempt_operation' => ExemptOperationType::E1
operationQualificationType: OperationQualificationType::SUBJECT_DIRECT,
previous: $previous, // or null for the first invoice
recipient: $recipient,
);
} catch (CertificateException $e) {
$this->error($e->getMessage());
exit();
}
echo $result->hash;
echo $result->json; // JSON response from the SOAP client
if ($result->success) {
echo 'Success';
echo $result->csv; // CSV code from AEAT
echo $result->qrSVG; // QR code as SVG string
echo $result->qrURI; // Fully qualified URI for further QR code generation
} else {
if ($result->status == EstadoRegistro::ACCEPTED_ERRORES) {
// Invoice was registered with errors
echo $result->status->name;
echo $result->csv;
}
echo 'Errors:' . PHP_EOL;
foreach ($result->errors as $error) {
echo $error;
}
}
use Taiwanleaftea\TltVerifactu\Classes\Certificate;
use Taiwanleaftea\TltVerifactu\Support\Facades\Verifactu;
$certificate = new Certificate('certificate.p12', 'password');
Verifactu::config($certificate);
echo $result->request; // unsigned XML
echo $result->signedRequest; // XAdES-EPES signed XML
echo $result->registryRecordId;
echo $result->registryRecord?->id;
use Illuminate\Support\Carbon;
use Taiwanleaftea\TltVerifactu\Support\Facades\Verifactu;
use Taiwanleaftea\TltVerifactu\Exceptions\QRGeneratorException;
// Base64-encoded PNG
try {
$qrcode = Verifactu::generateQrPNG(
issuerNIF: 'A12345678',
invoiceDate: Carbon::createFromFormat('Y-m-d', '2025-01-12'),
number: '2025/2',
totalAmount: '121.00',
);
} catch (QRGeneratorException $e) {
echo $e->getMessage();
}
// QR code in SVG format
$qrcode = Verifactu::generateQrSVG(
issuerNIF: 'A12345678',
invoiceDate: Carbon::createFromFormat('Y-m-d', '2025-01-12'),
number: '2025/2',
totalAmount: '121.00',
);