Paquete para firmar XML de documentos electrónicos (Factura, Guía de remisión, Nota crédito, Nota débito y Comprobante de retención) basado en las especificaciones del Servicio de Rentas Internas (SRI) de Ecuador.
composer require dazza-dev/sri-signeruse DazzaDev\SriSigner\Signer;
// Instanciar el signer
$signer = new Signer(
certificatePath: __DIR__ . '/certificado.p12',
certificatePassword: 'clave_certificado',
);
// XML como string o DOMDocument
$xmlString = file_get_contents(__DIR__ . '/factura.xml');
// Cargar el XML en el signer
$signer->loadXML($xmlString);
// Firmar el XML
$signedXML = $signer->sign();- El documento XML a firmar debe contener únicamente el nodo raíz (por ejemplo:
factura,notaCredito,notaDebito) con su atributoid="comprobante", el atributoversioncorrespondiente, y sus elementos hijos que describen el contenido del documento, sin incluir otros namespaces adicionales.
<?xml version="1.0" encoding="UTF-8"?>
<factura Id="comprobante" version="1.1.0">
<infoTributaria>...</infoTributaria>
<infoFactura>...</infoFactura>
<detalles>...</detalles>
<factura>- La factura debe estar en formato UTF-8.
- Sin namespaces (xmlns).
<factura
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="comprobante"
version="2.1.0"
>
...
</factura>En este ejemplo, el xmlns:ds="..." debe ser eliminado. Como contexto, ningún namespace es necesario para la factura en sí. Este paquete se encarga de colocar los namespaces necesarios en la firma digital generada.
El paquete se ha probado satisfactoriamente usando certificados .p12 de estos proveedores:
- Uanataca.
- Security Data.
Si pruebas el paquete con .p12 de otros proveedores y encuentras problemas, por favor crea un issue
Una vez firmado el XML, puedes enviarlo al SRI usando el paquete SRI Sender.
Si necesitas generar un XML para firmar, puedes usar el paquete SRI XML Generator.
Contribuciones son bienvenidas. Si encuentras algún error o tienes ideas para mejoras, por favor abre un issue o envía un pull request. Asegúrate de seguir las guías de contribución.
SRI Signer fue creado por DAZZA.
Este proyecto está licenciado bajo la Licencia MIT.