PHP code example of matiz-studio-creative / sri-toolkit

1. Go to this page and download the library: Download matiz-studio-creative/sri-toolkit 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/ */

    

matiz-studio-creative / sri-toolkit example snippets




use MTZ\Toolkit\AccessKeyGenerator\AccessKeyGenerator;
use MTZ\Toolkit\AccessKeyGenerator\Data\AccessKeyData;
use MTZ\Toolkit\AccessKeyGenerator\Enums\DocumentType;
use MTZ\Toolkit\AccessKeyGenerator\Enums\Environment as AccessKeyEnvironment;
use MTZ\Toolkit\Sender\Config\SenderConfig;
use MTZ\Toolkit\Sender\Enums\Environment as SenderEnvironment;
use MTZ\Toolkit\Sender\Sender;
use MTZ\Toolkit\Signer\Signer;
use MTZ\Toolkit\XMLMaker\Data\XmlGenerationData;
use MTZ\Toolkit\XMLMaker\Enums\XmlDocumentType;
use MTZ\Toolkit\XMLMaker\Enums\XmlEnvironment;
use MTZ\Toolkit\XMLMaker\Validation\XsdValidator;
use MTZ\Toolkit\XMLMaker\XMLMaker;

// 1. Generate 49-digit Access Key
$accessKey = (new AccessKeyGenerator())->generate(
    AccessKeyData::make(
        emissionDate: '2026-05-13',
        documentType: DocumentType::Invoice,
        ruc: '1790012345001',
        environment: AccessKeyEnvironment::Testing,
        sequential: 25,
        numericCode: '12345678',
        establishmentCode: '001',
        emissionPointCode: '001',
    ),
);

// 2. Generate XML Structure
$generated = (new XMLMaker())->generate(
    XmlGenerationData::make(
        documentType: XmlDocumentType::Invoice,
        environment: XmlEnvironment::Testing,
        accessKey: $accessKey,
        data: $invoicePayload, // Check documentation for payload structure
    ),
);
$xml = $generated->toString();

// 3. Perform Offline Validation against official XSD
$errors = (new XsdValidator())->validate($xml, XmlDocumentType::Invoice);
if ($errors !== []) {
    throw new RuntimeException("Invalid XML Schema:\n" . implode("\n", $errors));
}

// 4. Digital Signature (XAdES-BES)
$signedXml = (new Signer(
    certificatePath: '/secure/path/certificate.p12',
    certificatePassword: getenv('SRI_CERTIFICATE_PASSWORD') ?: '',
))->loadXml($xml)->sign();

// 5. Transmit to SRI Web Services
$sender = new Sender(new SenderConfig(environment: SenderEnvironment::Testing));
$result = $sender->send($accessKey, $signedXml);

if (! $result->success) {
    throw new RuntimeException($result->error ?? 'SRI document authorization failed.');
}

$authorizedXml = $result->authorizationResult?->authorizedDocument?->xml;

use MTZ\Toolkit\XMLMaker\Validation\IdentificationValidator;
use MTZ\Toolkit\XMLMaker\Validation\XsdValidator;

$xsdErrors = (new XsdValidator())->validate($xml, XmlDocumentType::Invoice);
$isValidRuc = (new IdentificationValidator())->isValidRuc('1760013210001');

$result = $sender->send($accessKey, $signedXml);

foreach ($result->authorizationResult?->messages ?? [] as $message) {
    if ($message->sriCode()?->isProcessing()) {
        // Code 70: SRI batch in queue, do not re-emit immediately
    }
    if ($message->sriCode()?->isImpediment()) {
        // Critical error: fix data before resending
    }
}

use MTZ\Toolkit\RideGenerator\Data\RideData;
use MTZ\Toolkit\RideGenerator\Enums\RideDocumentType;
use MTZ\Toolkit\RideGenerator\RideGenerator;

$pdf = (new RideGenerator())->generate(
    RideData::make(RideDocumentType::Invoice, $accessKey, $ridePayload),
);

$pdf->saveTo('/var/documents/ride_invoice.pdf');

use MTZ\Toolkit\Documents\DocumentStore;
use MTZ\Toolkit\Storage\LocalDocumentStorage;

$store = new DocumentStore(new LocalDocumentStorage('/var/documents'));
$store->putSignedXml($ruc, new DateTimeImmutable(), $accessKey, $signedXml);
$store->putRidePdf($ruc, new DateTimeImmutable(), $accessKey, $pdf->content);

use MTZ\Toolkit\Pipeline\Data\DocumentEmission;
use MTZ\Toolkit\Pipeline\DocumentPipeline;
use MTZ\Toolkit\Pipeline\Signers\CertificateDocumentSigner;

$pipeline = new DocumentPipeline(
    signer: new CertificateDocumentSigner($certPath, $certPassword),
    sender: new Sender(),
    rideGenerator: new RideGenerator(),
    documentStore: new DocumentStore($storage),
);

$result = $pipeline->emit(new DocumentEmission(
    xml: $xmlGenerationData,
    ride: RideData::make(RideDocumentType::Invoice, $accessKey, $ridePayload),
    ownerKey: '1790012345001',
));

use MTZ\Toolkit\Catalogs\Catalogs;

$registry = Catalogs::registry();
$registry->get('vat-rates', '4'); // VAT 15%
$registry->list('payment-methods');