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',
));