PHPackages                             amephia/sri-ec - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. amephia/sri-ec

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

amephia/sri-ec
==============

High-performance Ecuador SRI Electronic Billing Library

v1.1.0(3mo ago)3161↑50%MITPHPPHP &gt;=8.1

Since Jan 28Pushed 3mo agoCompare

[ Source](https://github.com/JonathanTeran/teran-sri-ec)[ Packagist](https://packagist.org/packages/amephia/sri-ec)[ RSS](/packages/amephia-sri-ec/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (2)Versions (3)Used By (0)

🇪🇨 amephia/sri-ec
=================

[](#-amephiasri-ec)

[![Última Versión en Packagist](https://camo.githubusercontent.com/97329d58c8aff905ab5d4a700b816b34d0fbe87532b0ad503fbe78b3012d8243/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f616d65706869612f7372692d65632e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/amephia/sri-ec) [![Licencia de Software](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md) [![Descargas Totales](https://camo.githubusercontent.com/89fe39397fc29d32a0570ab06b6082ce20c046973f6ee9c2915251affcead320/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f616d65706869612f7372692d65632e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/amephia/sri-ec) [![Versión PHP](https://camo.githubusercontent.com/8c2ac16f3af88b9fbca15e8c495f832a7e5a1f8beced9bd00fe2ddad3a57485d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230382e312d626c75652e7376673f7374796c653d666c61742d737175617265)](https://www.php.net/)

Librería profesional y de alto rendimiento para **Facturación Electrónica del SRI Ecuador**. Simplifica el proceso de generación, firma y autorización de documentos electrónicos según los últimos requerimientos técnicos del SRI.

✨ Características Principales
-----------------------------

[](#-características-principales)

- ✅ **Firma Electrónica Universal**: Compatible con archivos `.p12` o `.pfx` de cualquier entidad certificadora del Ecuador.
- ✅ **Compatibilidad Avanzada**: Manejo robusto de cadenas de confianza (certificados intermedios) y números de serie de gran longitud.
- ✅ **Algoritmos Modernos**: Soporte dinámico para llaves RSA y ECDSA.
- ✅ **Todos los Comprobantes**: Facturas, Notas de Crédito/Débito, Retenciones y Guías de Remisión.
- ✅ **Validación XSD**: Validación local contra esquemas oficiales del SRI.
- ✅ **Cliente SOAP**: Comunicación robusta con servicios web del SRI (Recepción y Autorización).
- ✅ **Clave de Acceso**: Generación automática con algoritmo Módulo 11.
- ✅ **Validación de RUC**: Online (SRI) con fallback local.
- ✅ **Soporte de Ambientes**: `pruebas` y `produccion`.

🔐 Proveedores de Firma Soportados
---------------------------------

[](#-proveedores-de-firma-soportados)

Esta librería ha sido probada y ajustada para soportar certificados de:

- **Security Data** (soporte para nuevos números de serie largos)
- **Uanataca** (manejo correcto de cadena de confianza)
- **Banco Central del Ecuador (BCE)**
- **ANF AC Ecuador**
- **Consejo de la Judicatura**
- **Datilmedia**
- **Eclipsoft**
- Y cualquier otro proveedor que emita certificados estándar X.509 en formato PKCS#12.

📋 Tipos de Comprobantes Soportados
----------------------------------

[](#-tipos-de-comprobantes-soportados)

TipoCódigoMétodoFactura01`facturaFromArray()`Nota de Crédito04`notaCreditoFromArray()`Nota de Débito05`notaDebitoFromArray()`Guía de Remisión06`guiaRemisionFromArray()`Comprobante de Retención07`retencionFromArray()`🔄 Flujo de Trabajo
------------------

[](#-flujo-de-trabajo)

 ```
sequenceDiagram
    participant App as Tu App (PHP)
    participant Lib as amephia/sri-ec
    participant SRI_REST as SRI Online (REST)
    participant SRI_SOAP as SRI Recepción (SOAP)

    App->>Lib: 1. Enviar Datos (Array)

    rect rgb(240, 240, 240)
        Note over Lib, SRI_REST: Validación RUC
        Lib->>SRI_REST: 2. Consultar RUC (Online)
        alt RUC Existe
            SRI_REST-->>Lib: OK
        else Fallo / Timeout
            Lib->>Lib: Fallback: Algoritmo Módulo 11
        end
    end

    Lib->>Lib: 3. Generar Clave de Acceso (49 dígitos)
    Lib->>Lib: 4. Generar XML
    Lib->>Lib: 5. Validar XSD
    Lib->>Lib: 6. Firmar XML (XAdES-BES)

    Lib->>SRI_SOAP: 7. Enviar XML Firmado
    SRI_SOAP-->>Lib: 8. Confirmación de Recepción

    Lib->>SRI_SOAP: 9. Solicitar Autorización
    SRI_SOAP-->>Lib: 10. Respuesta (AUTORIZADO/NO AUTORIZADO)

    Lib-->>App: 11. Retornar Resultado
```

      Loading 🚀 Instalación
-------------

[](#-instalación)

```
composer require amephia/sri-ec
```

🛠 Requisitos
------------

[](#-requisitos)

- **PHP**: `^8.1`
- **Extensiones**: `ext-curl`, `ext-dom`, `ext-libxml`, `ext-openssl`, `ext-soap`

📖 Uso
-----

[](#-uso)

### Configuración Básica

[](#configuración-básica)

```
use Teran\Sri\SRI;

// Inicializar en ambiente 'pruebas' o 'produccion'
$sri = new SRI('pruebas');

// Configurar tu firma digital (.p12)
$p12 = file_get_contents('ruta/a/tu/firma.p12');
$sri->setFirma($p12, 'tu_contraseña_p12');
```

### Procesar una Factura

[](#procesar-una-factura)

```
$facturaData = [
    'infoTributaria' => [
        'ambiente' => '1', // 1=Pruebas, 2=Producción
        'razonSocial' => 'MI EMPRESA S.A.',
        'ruc' => '1790011001001',
        'estab' => '001',
        'ptoEmi' => '001',
        'secuencial' => '000000001',
        'dirMatriz' => 'Quito, Ecuador',
    ],
    'infoFactura' => [
        'fechaEmision' => '26/01/2026',
        'tipoIdentificacionComprador' => '05',
        'razonSocialComprador' => 'CLIENTE FINAL',
        'identificacionComprador' => '9999999999',
        'totalSinImpuestos' => '100.00',
        'totalDescuento' => '0.00',
        'importetotal' => '112.00',
        'totalConImpuestos' => [
            ['codigo' => '2', 'codigoPorcentaje' => '2', 'baseImponible' => '100.00', 'valor' => '12.00']
        ],
        'pagos' => [
            ['formaPago' => '01', 'total' => '112.00']
        ]
    ],
    'detalles' => [
        [
            'codigoPrincipal' => 'PROD001',
            'descripcion' => 'Producto de prueba',
            'cantidad' => '1.00',
            'precioUnitario' => '100.00',
            'descuento' => '0.00',
            'precioTotalSinImpuesto' => '100.00',
            'impuestos' => [
                ['codigo' => '2', 'codigoPorcentaje' => '2', 'tarifa' => '12.00', 'baseImponible' => '100.00', 'valor' => '12.00']
            ]
        ]
    ]
];

try {
    $resultado = $sri->facturaFromArray($facturaData);

    echo "Clave de Acceso: " . $resultado['claveAcceso'] . "\n";
    echo "Estado: " . $resultado['autorizacion']->estado . "\n";

    if ($resultado['autorizacion']->estado === 'AUTORIZADO') {
        echo "Número de Autorización: " . $resultado['autorizacion']->numeroAutorizacion . "\n";
        echo "Fecha de Autorización: " . $resultado['autorizacion']->fechaAutorizacion . "\n";
    } else {
        foreach ($resultado['autorizacion']->mensajes as $mensaje) {
            echo "Error [{$mensaje->identificador}]: {$mensaje->mensaje}\n";
        }
    }
} catch (\Teran\Sri\Exceptions\ValidationException $e) {
    echo "Error de validación: " . $e->getMessage() . "\n";
    foreach ($e->getErrors() as $error) {
        echo "- $error\n";
    }
}
```

### Procesar Nota de Crédito

[](#procesar-nota-de-crédito)

```
$notaCreditoData = [
    'infoTributaria' => [
        'ambiente' => '1',
        'razonSocial' => 'MI EMPRESA S.A.',
        'ruc' => '1790011001001',
        'estab' => '001',
        'ptoEmi' => '001',
        'secuencial' => '000000001',
        'dirMatriz' => 'Quito, Ecuador',
    ],
    'infoNotaCredito' => [
        'fechaEmision' => '26/01/2026',
        'tipoIdentificacionComprador' => '05',
        'razonSocialComprador' => 'CLIENTE FINAL',
        'identificacionComprador' => '9999999999',
        'codDocModificado' => '01', // Factura
        'numDocModificado' => '001-001-000000001',
        'fechaEmisionDocSustento' => '25/01/2026',
        'totalSinImpuestos' => '50.00',
        'valorModificacion' => '56.00',
        'moneda' => 'DOLAR',
        'totalConImpuestos' => [
            ['codigo' => '2', 'codigoPorcentaje' => '2', 'baseImponible' => '50.00', 'valor' => '6.00']
        ],
        'motivo' => 'Devolución parcial de mercadería'
    ],
    'detalles' => [/* ... */]
];

$resultado = $sri->notaCreditoFromArray($notaCreditoData);
```

### Procesar Comprobante de Retención

[](#procesar-comprobante-de-retención)

```
$retencionData = [
    'infoTributaria' => [
        'ambiente' => '1',
        'razonSocial' => 'MI EMPRESA S.A.',
        'ruc' => '1790011001001',
        'estab' => '001',
        'ptoEmi' => '001',
        'secuencial' => '000000001',
        'dirMatriz' => 'Quito, Ecuador',
    ],
    'infoCompRetencion' => [
        'fechaEmision' => '26/01/2026',
        'tipoIdentificacionSujetoRetenido' => '04',
        'razonSocialSujetoRetenido' => 'PROVEEDOR S.A.',
        'identificacionSujetoRetenido' => '1790011001001',
        'periodoFiscal' => '01/2026',
    ],
    'docsSustento' => [
        [
            'codSustento' => '01',
            'codDocSustento' => '01',
            'numDocSustento' => '001-001-000000001',
            'fechaEmisionDocSustento' => '25/01/2026',
            'totalSinImpuestos' => '1000.00',
            'importeTotal' => '1120.00',
            'retenciones' => [
                [
                    'codigo' => '1', // Renta
                    'codigoRetencion' => '303',
                    'baseImponible' => '1000.00',
                    'porcentajeRetener' => '10.00',
                    'valorRetenido' => '100.00'
                ]
            ]
        ]
    ]
];

$resultado = $sri->retencionFromArray($retencionData);
```

### Consultar Estado de Autorización

[](#consultar-estado-de-autorización)

```
$claveAcceso = '2601202601179001100100110010010000000011234567811';
$autorizacion = $sri->consultarAutorizacion($claveAcceso);

if ($autorizacion->estado === 'AUTORIZADO') {
    echo "Comprobante autorizado\n";
} else {
    echo "No autorizado: " . $autorizacion->mensajes[0]->mensaje . "\n";
}
```

### Solo Firmar XML (Sin Enviar)

[](#solo-firmar-xml-sin-enviar)

```
$xmlFirmado = $sri->firmarXml($xmlSinFirma);
```

🏗 Uso Avanzado
--------------

[](#-uso-avanzado)

Para implementaciones personalizadas, puedes usar `ComprobanteInterface`:

```
use Teran\Sri\Strategies\ComprobanteInterface;

class MiDocumentoPersonalizado implements ComprobanteInterface {
    public function getTipo(): string { return '01'; }
    public function generarXml(): string { /* ... */ }
    public function getXsdPath(): string { /* ... */ }
    public function getDatosClave(): array { /* ... */ }
}

$resultado = $sri->procesar(new MiDocumentoPersonalizado());
```

📂 Estructura del Proyecto
-------------------------

[](#-estructura-del-proyecto)

```
src/
├── SRI.php                    # Clase principal
├── Generators/                # Generadores de XML
│   ├── FacturaGenerator.php
│   ├── NotaCreditoGenerator.php
│   ├── NotaDebitoGenerator.php
│   ├── RetencionGenerator.php
│   └── GuiaRemisionGenerator.php
├── Signature/
│   └── XadesSignature.php     # Firma XAdES-BES
├── Soap/
│   └── SriSoapClient.php      # Cliente SOAP
├── Schema/
│   ├── XsdValidator.php
│   └── BusinessValidator.php
├── Dto/
│   ├── RecepcionResponse.php
│   ├── AutorizacionResponse.php
│   └── Mensaje.php
├── Utils/
│   ├── ClaveAcceso.php        # Generador Módulo 11
│   └── RucValidator.php
└── Exceptions/
    └── SriException.php

```

🔐 Estructura de Firma XAdES-BES
-------------------------------

[](#-estructura-de-firma-xades-bes)

La firma digital cumple con el estándar XAdES-BES requerido por el SRI:

```

        ...
        ...
        ...

    ...

            ...

                ...
                ...

                    ...

                            ...
                            ...

                        Comprobante electrónico
                        text/xml
                        UTF-8

```

🔧 Troubleshooting
-----------------

[](#-troubleshooting)

### Error: "Could not read p12 file" o "error:0308010C:digital envelope routines::unsupported"

[](#error-could-not-read-p12-file-o-error0308010cdigital-envelope-routinesunsupported)

**Causa**: Certificados P12 legacy (pre-2024) usan algoritmos de cifrado RC2/3DES que OpenSSL 3.0+ rechaza por defecto.

**Solución**: Esta librería automáticamente usa OpenSSL 1.1 cuando está disponible. En macOS con Homebrew:

```
brew install openssl@1.1
```

La librería detectará automáticamente la instalación y la usará para certificados legacy.

### Error: "FECHA EMISIÓN EXTEMPORÁNEA"

[](#error-fecha-emisión-extemporánea)

**Causa**: El SRI rechaza facturas con fechas que no coinciden con la fecha/hora actual del servidor SRI.

**Solución**:

1. Generar y enviar la factura inmediatamente (no guardar para enviar después)
2. Usar la zona horaria de Ecuador: `America/Guayaquil`
3. Formato de fecha correcto: `dd/MM/yyyy` (ej: `01/02/2026`)

```
// Correcto
date_default_timezone_set('America/Guayaquil');
$fecha = date('d/m/Y'); // Fecha actual en Ecuador
```

### Error: "Class 'Teran\\Sri\\Exceptions\\SignatureException' not found"

[](#error-class-teransriexceptionssignatureexception-not-found)

**Causa**: Problema de autoloading (solo en versiones antiguas del paquete).

**Solución**: Actualizar a la última versión:

```
composer update amephia/sri-ec
```

### Error: "No matching global element declaration available"

[](#error-no-matching-global-element-declaration-available)

**Causa**: XSD con validación strict para firma digital (solo en versiones antiguas).

**Solución**: Actualizar a la última versión que incluye XSD con `processContents="lax"`.

### Certificados Soportados

[](#certificados-soportados)

✅ **Funcionan correctamente**:

- Certificados legacy (2020-2024) con OpenSSL 1.1
- Certificados modernos (2025+) con OpenSSL 3.0+
- Todos los proveedores ecuatorianos (Uanataca, Security Data, BCE, ANF AC, etc.)

🤝 Contribuir
------------

[](#-contribuir)

¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.

📄 Licencia
----------

[](#-licencia)

Licencia MIT. Por favor consulta el [Archivo de Licencia](LICENSE.md) para más información.

---

Desarrollado con ❤️ por [Jonathan Terán](https://github.com/jonathanteran)

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance80

Actively maintained with recent releases

Popularity18

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

2

Last Release

106d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/22844344?v=4)[Jonathan Teran](/maintainers/JonathanTeran)[@JonathanTeran](https://github.com/JonathanTeran)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/amephia-sri-ec/health.svg)

```
[![Health](https://phpackages.com/badges/amephia-sri-ec/health.svg)](https://phpackages.com/packages/amephia-sri-ec)
```

###  Alternatives

[ecotone/ecotone

Supporting you in building DDD, CQRS, Event Sourcing applications with ease.

558549.8k17](/packages/ecotone-ecotone)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[j0k3r/php-readability

Automatic article extraction from HTML

186808.8k6](/packages/j0k3r-php-readability)[symfony/ai-platform

PHP library for interacting with AI platform provider.

51927.7k136](/packages/symfony-ai-platform)[symfony/ai-agent

PHP library for building agentic applications.

30536.7k44](/packages/symfony-ai-agent)[spomky-labs/pwa-bundle

Progressive Web App Manifest Generator Bundle for Symfony.

6144.4k1](/packages/spomky-labs-pwa-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
