Skip to content

Signer ​

Signer firma XML SRI con una estructura XMLDSig/XAdES-BES compatible con el flujo implementado por el paquete.

API principal ​

php
use MTZ\Toolkit\Signer\Signer;

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

Requisitos del XML ​

El documento debe:

  • Ser XML valido.
  • Tener nodo raiz.
  • Incluir id="comprobante" o Id="comprobante" en el nodo raiz.
  • No declarar namespaces en el nodo raiz.

Ejemplo valido:

xml
<factura id="comprobante" version="2.1.0">
  <infoTributaria />
</factura>

XMLMaker genera el atributo requerido automaticamente.

Certificado PKCS#12 ​

El constructor recibe ruta y password:

php
new Signer(
    certificatePath: '/secure/path/certificate.p12',
    certificatePassword: $password,
);

Internamente el loader:

  • Verifica que el archivo exista y sea legible.
  • Lee el contenedor PKCS#12 con openssl_pkcs12_read.
  • Extrae llave privada, certificado, issuer, serial, modulo y exponente RSA.

Resultado enriquecido ​

Si necesitas metadatos de la firma:

php
$result = (new Signer($path, $password))
    ->loadXml($xml)
    ->signAsResult();

$result->xml;
$result->signatureId;
$result->signedAt;

Configuracion ​

SignerConfig permite cambiar valores base:

php
use MTZ\Toolkit\Signer\Config\SignerConfig;

$config = new SignerConfig(
    xmlVersion: '1.0',
    encoding: 'UTF-8',
    timeZone: 'America/Guayaquil',
    documentReferenceId: 'comprobante',
);

Algoritmos ​

La implementacion usa identificadores XMLDSig/XAdES-BES con SHA-1 porque ese es el formato SRI-compatible implementado actualmente.

WARNING

No uses este signer como primitiva de firma general para protocolos nuevos. Esta orientado al formato de comprobantes SRI.

Errores comunes ​

ExcepcionCausa probable
CertificateExceptionArchivo ilegible, password invalido o llave/certificado no encontrado
InvalidXmlExceptionXML vacio, invalido, sin id="comprobante" o con namespace en raiz
SignerExceptionError al serializar, canonicalizar o firmar

Publicado bajo licencia MIT.