PHPackages                             fvildoso/sii-dte-php - 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. fvildoso/sii-dte-php

ActiveLibrary

fvildoso/sii-dte-php
====================

Librería PHP para integración con DTE (Documentos Tributarios Electrónicos) del SII de Chile

00PHP

Since Aug 11Pushed 1w agoCompare

[ Source](https://github.com/fvildoso/sii-dte-php)[ Packagist](https://packagist.org/packages/fvildoso/sii-dte-php)[ RSS](/packages/fvildoso-sii-dte-php/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

SII DTE PHP
===========

[](#sii-dte-php)

Librería PHP para integración con el **Sistema de Facturación Electrónica (DTE)** del Servicio de Impuestos Internos de Chile.

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](LICENSE)[![PHP](https://camo.githubusercontent.com/d4b5fa4adf514144779a7864904c5e15236c0e798635240c7f6ce9a455657b80/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e302532422d626c75652e737667)](https://php.net)

---

¿Qué hace esta librería y qué no?
---------------------------------

[](#qué-hace-esta-librería-y-qué-no)

### ✅ Se hace cargo la librería

[](#-se-hace-cargo-la-librería)

FunciónClase responsableAutenticación con el SII (semilla → token, renovación automática)`Auth/TokenManager`Generación del XML DTE (tipos 33, 34, 39, 41, 46, 52, 56, 61, 110, 111, 112)`Document/DteBuilder`Cálculo automático de neto, IVA 19% y total`Document/DteBuilder`Firma digital XMLDSig del DTE y del sobre EnvioDTE`Signature/XmlSigner`Construcción del sobre EnvioDTE`Envelope/EnvelopeBuilder`Envío al SII y obtención del Track ID`Utils/SiiWebService`Consulta de estado por Track ID`Utils/SiiWebService`Asignación de folios CAF con bloqueo de concurrencia`Folio/FolioManager`Validación del certificado digital (vencimiento, ruta segura)`Storage/CertificateStore`Carga del certificado desde archivo o variable de entorno`Storage/CertificateStore`Persistencia del XML firmado, Track ID y estado en la BD`Storage/DteRepository`Generación de HTML renderizable a PDF`Pdf/PdfGenerator`Actualización masiva de estados pendientes (para cron)`SiiClient::procesarPendientes()`### ❌ Debes implementar en tu aplicación

[](#-debes-implementar-en-tu-aplicación)

TareaCómo hacerloCrear las tablas en la BDEjecutar `database/migrations.sql`Importar el CAF al sistema`$folioManager->importarCaf($xml, $tipo)`Alertas de folios por agotarseConsultar `$folioManager->foliosDisponibles($tipo)`Solicitar nuevos CAF al SIIManual en misiir.sii.cl cuando queden pocos foliosRenovar el certificado digitalCon tu proveedor antes del vencimientoCron de actualización de estados`$client->procesarPendientes()` cada 15 minutosGenerar el PDF finalInstalar `dompdf/dompdf` y renderizar el HTMLTimbre electrónico PDF417Ver `docs/timbre.md`Guardar/enviar el PDF al clienteTu lógica de negocio---

Tipos de DTE soportados
-----------------------

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

CódigoNombreIVAObservaciones**33**Factura ElectrónicaAfectaMás común. Receptor es empresa**34**Factura No Afecta ElectrónicaExentaServicios médicos, educación**39**Boleta ElectrónicaAfectaConsumidor final. Obligatoria desde 2023**41**Boleta No Afecta ElectrónicaExentaBoleta a consumidor final sin IVA**46**Factura de Compra ElectrónicaAfectaLa emite el COMPRADOR, retiene el IVA**52**Guía de Despacho ElectrónicaAfectaRequiere `ind_traslado`**56**Nota de Débito ElectrónicaAfectaAumenta monto. Requiere referencia**61**Nota de Crédito ElectrónicaAfectaAnula o corrige. Requiere referencia**110**Factura de ExportaciónSin IVAMoneda extranjera. Requiere país**111**Nota de Débito ExportaciónSin IVARequiere referencia**112**Nota de Crédito ExportaciónSin IVARequiere referencia---

Instalación
-----------

[](#instalación)

```
composer require tuempresa/sii-dte-php
```

---

Flujo completo paso a paso
--------------------------

[](#flujo-completo-paso-a-paso)

### PASO 1 — Obtener el certificado digital

[](#paso-1--obtener-el-certificado-digital)

Proveedor acreditado: E-CERT Chile, E-Sign, Acepta.com. El certificado viene en formato `.p12`.

```
# Verificar que es válido:
openssl pkcs12 -info -in empresa.p12 -noout

# Ver vencimiento:
openssl pkcs12 -in empresa.p12 -nokeys -clcerts | openssl x509 -text | grep "Not After"
```

**Dónde guardarlo:**

```
# CORRECTO: fuera del webroot
/var/secure/certs/empresa.p12
chmod 640 /var/secure/certs/empresa.p12

# INCORRECTO: nunca en directorio público
# /var/www/html/public/cert.p12  ← cualquiera lo descarga
```

La contraseña del certificado debe venir de variable de entorno:

```
# En .env o en el servidor:
SII_CERT_PASS=mi_contraseña_segura

# Agregar al .gitignore:
echo "*.p12" >> .gitignore
```

---

### PASO 2 — Registrarse en el SII

[](#paso-2--registrarse-en-el-sii)

1. Ir a **misiir.sii.cl** con el RUT de tu empresa
2. **Servicios online → Factura Electrónica → Sistema de Facturación Propio**
3. Subir tu certificado digital para registro
4. Anotar el **número de resolución** y **fecha de resolución**
    - En certificación: número = `0`, fecha = `2019-10-18`

---

### PASO 3 — Crear las tablas en la base de datos

[](#paso-3--crear-las-tablas-en-la-base-de-datos)

```
mysql -u usuario -p mi_base_de_datos importarCaf($cafXml, tipoDte: 33);

echo "Disponibles: " . $folioManager->foliosDisponibles(33); // → 100
```

**Alerta de agotamiento:**

```
if ($folioManager->foliosDisponibles(33) < 10) {
    enviarAlerta("⚠️ Pocos folios. Solicita CAF en el SII.");
}
```

---

### PASO 5 — Configurar el cliente

[](#paso-5--configurar-el-cliente)

```
use SiiDte\SiiClient;
use SiiDte\Folio\FolioManager;
use SiiDte\Storage\CertificateStore;
use SiiDte\Storage\DteRepository;

// Opción A: desde archivo
$cert = CertificateStore::fromFile(
    '/var/secure/certs/empresa.p12',
    getenv('SII_CERT_PASS')
);

// Opción B: desde variable de entorno (base64 del .p12)
// $cert = CertificateStore::fromEnv('SII_CERT_B64', 'SII_CERT_PASS');

$pdo          = new PDO('mysql:host=localhost;dbname=mi_bd', 'user', 'pass');
$folioManager = new FolioManager($pdo);
$dteRepo      = new DteRepository($pdo);

$client = new SiiClient(
    config: [
        'rut_emisor'        => '12345678',
        'dv_emisor'         => '9',
        'razon_social'      => 'Mi Empresa SpA',
        'giro'              => 'Desarrollo de Software',
        'direccion'         => 'Av. Providencia 1234',
        'ciudad'            => 'Santiago',
        'codigo_actividad'  => '620200',       // Código CIIU de tu empresa
        'telefono'          => '+56212345678', // opcional
        'email'             => 'dte@empresa.cl', // opcional
        'numero_resolucion' => 0,              // 0 en certificación
        'fecha_resolucion'  => '2019-10-18',
        'ambiente'          => 'certificacion', // ← 'produccion' cuando esté aprobado
    ],
    certStore: $cert
);

$client
    ->usarFolioManager($folioManager)  // asignación automática de folios
    ->usarRepositorio($dteRepo);       // persistencia en BD
```

---

### PASO 6 — Emitir documentos

[](#paso-6--emitir-documentos)

```
use SiiDte\Document\DteTypes;

// Factura Electrónica
$resultado = $client->enviarDte(DteTypes::FACTURA_ELECTRONICA, [
    'fecha'    => date('Y-m-d'),
    // folio: se asigna automáticamente si usas FolioManager
    'receptor' => [
        'rut' => '98765432', 'dv' => '1',
        'razon_social' => 'Empresa Compradora Ltda',
        'giro'         => 'Comercio',
        'direccion'    => 'Calle Ejemplo 123',
        'ciudad'       => 'Santiago',
    ],
    'detalle' => [
        [
            'codigo'          => 'PROD-001',
            'nombre'          => 'Producto A',
            'cantidad'        => 2,
            'precio_unitario' => 119000, // precio con IVA incluido
        ],
    ],
]);

echo "Track ID: " . $resultado['trackId']; // → guardar esto para consultar después
echo "Folio:    " . $resultado['folio'];
```

Ver más ejemplos para cada tipo de DTE en **`docs/estructura_datos.md`** y **`examples/integracion_completa.php`**.

---

### PASO 7 — Generar el PDF

[](#paso-7--generar-el-pdf)

```
# Instalar dompdf:
composer require dompdf/dompdf
```

```
$html = $client->generarHtmlPdf($resultado['xml'], [
    'logo_url'       => 'https://tuempresa.cl/logo.png',
    'color_primario' => '#2c5f8a',
]);

$pdf = new \Dompdf\Dompdf();
$pdf->loadHtml($html);
$pdf->setPaper('letter', 'portrait');
$pdf->render();
file_put_contents("factura_{$resultado['folio']}.pdf", $pdf->output());
```

> **Timbre Electrónico:** El PDF oficial del SII incluye un código de barras 2D (PDF417) generado con los datos del CAF y firma del SII. Ver `docs/timbre.md` para implementarlo.

---

### PASO 8 — Consultar estado

[](#paso-8--consultar-estado)

```
// Espera al menos 5-15 minutos después de enviar
$estado = $client->consultarEstado($resultado['trackId']);
// $estado['estado']: EPR=Aceptado, RSC=Rechazado, SOK=En proceso, DNK=No encontrado
// $estado['glosa']:  Mensaje descriptivo del SII
```

**Cron de actualización automática:**

```
# crontab -e
*/15 * * * * php /ruta/proyecto/bin/procesar_pendientes.php >> /var/log/sii.log 2>&1
```

```
// bin/procesar_pendientes.php
$resultados = $client->procesarPendientes();
// Actualiza automáticamente la BD con el estado final de cada DTE pendiente
```

---

### PASO 9 — Pasar a producción

[](#paso-9--pasar-a-producción)

1. Completar el **Proceso de Certificación** en el portal SII
2. Enviar los sets de prueba requeridos (usando ambiente `certificacion`)
3. Esperar aprobación del SII
4. Cambiar en la configuración: ```
    'ambiente'          => 'produccion',
    'numero_resolucion' => 80,           // tu número real
    'fecha_resolucion'  => '2024-01-15', // tu fecha real
    ```
5. Solicitar CAF de **producción** (los de certificación no son válidos)

---

Estructura del proyecto
-----------------------

[](#estructura-del-proyecto)

```
sii-dte-php/
├── src/
│   ├── SiiClient.php                  ← Punto de entrada principal
│   ├── Auth/TokenManager.php          ← Autenticación semilla/token SII
│   ├── Document/
│   │   ├── DteBuilder.php             ← XML para todos los tipos de DTE
│   │   └── DteTypes.php               ← Constantes y metadatos
│   ├── Envelope/EnvelopeBuilder.php   ← Sobre EnvioDTE
│   ├── Exceptions/
│   │   ├── SiiException.php
│   │   └── FolioAgotadoException.php
│   ├── Folio/FolioManager.php         ← CAF y folios con bloqueo de concurrencia
│   ├── Pdf/PdfGenerator.php           ← HTML → PDF
│   ├── Signature/XmlSigner.php        ← Firma XMLDSig
│   ├── Storage/
│   │   ├── CertificateStore.php       ← Carga segura del certificado
│   │   └── DteRepository.php          ← Persistencia en BD
│   └── Utils/
│       ├── RutHelper.php              ← Validación y formato RUT
│       └── SiiWebService.php          ← HTTP al SII
├── database/migrations.sql            ← Tablas necesarias
├── docs/estructura_datos.md           ← Campos por tipo de DTE
├── examples/
│   ├── integracion_completa.php       ← Todos los tipos integrados
│   ├── enviar_factura.php
│   └── nota_credito.php
├── tests/
├── composer.json
└── LICENSE (MIT)

```

---

Seguridad del certificado
-------------------------

[](#seguridad-del-certificado)

```
// ✅ CORRECTO
$cert = CertificateStore::fromFile('/var/secure/certs/empresa.p12', getenv('SII_CERT_PASS'));
$cert = CertificateStore::fromEnv('SII_CERT_B64', 'SII_CERT_PASS');

// ❌ INCORRECTO (la librería lanza excepción si detecta rutas públicas)
$cert = CertificateStore::fromFile('/public/cert.p12', 'password_hardcodeado');
```

---

Referencias SII
---------------

[](#referencias-sii)

- [Portal Facturación Electrónica](https://www.sii.cl/factura_electronica/)
- [Documentación técnica DTE](https://www.sii.cl/factura_electronica/factura_mercado/formatos_dte.htm)
- [Ambiente de certificación](https://maullin.sii.cl/DTEWS/)
- [Portal emisor / CAF](https://misiir.sii.cl)

---

Licencia
--------

[](#licencia)

MIT © 2024. Ver [LICENSE](LICENSE).

###  Health Score

20

↑

LowBetter than 12% of packages

Maintenance64

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/1d9ab1be82d42d960a8126097f13f319340dcc66eafe23559916784b598feca9?d=identicon)[fvildoso](/maintainers/fvildoso)

---

Top Contributors

[![fvildoso](https://avatars.githubusercontent.com/u/9140883?v=4)](https://github.com/fvildoso "fvildoso (11 commits)")

### Embed Badge

![Health badge](/badges/fvildoso-sii-dte-php/health.svg)

```
[![Health](https://phpackages.com/badges/fvildoso-sii-dte-php/health.svg)](https://phpackages.com/packages/fvildoso-sii-dte-php)
```

PHPackages © 2026

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