platinum-place/laravel-dgii

Integration package for DGII (Electronic Invoicing e-CF) Dominican Republic. Automated signature, authentication, and submission for standard, consumption, and range cancellation documents.

Maintainers

Package info

github.com/platinum-place/laravel-dgii

Language:Blade

pkg:composer/platinum-place/laravel-dgii

Statistics

Installs: 347

Dependents: 0

Suggesters: 0

Stars: 7

Open Issues: 0


README

Latest Version on Packagist Total Downloads GitHub License

🎯 Filosofía del Paquete

Este paquete sigue una filosofía de facilitador (enabler):

  • El que sabe usar la DGII sabe usar el paquete.
  • No intentamos "esconder" ni duplicar las validaciones o flujos de la DGII bajo modelos complejos o DTOs pesados.
  • El paquete es 100% libre de estado (stateless) y no almacena credenciales ni claves en el archivo de configuración. Todo (entornos, tokens de acceso, certificados, contraseñas) se suministra en tiempo de ejecución por quien consume el método.
  • Facilitamos únicamente las partes complejas de la integración:
    1. La firma digital PKCS#12 de los XMLs.
    2. La autenticación mediante el ciclo Semilla -> Firma -> Token de acceso.
    3. La comunicación HTTP nativa optimizada con macros de Laravel para subir y consultar e-CF.

🏗️ Estructura de Directorios

  • Services (src/Services/): Contiene los servicios internos encargados del renderizado y firma digital de los XMLs (DgiiXmlRender) y del envío de peticiones HTTP a los servidores web de la DGII (DgiiClient).
  • DgiiService (src/Services/DgiiService.php): Gateway minimalista expuesto mediante el Facade Dgii que inyecta y orquesta los servicios internos para exponer firmas de métodos limpias.
  • Templates (resources/views/): Vistas Blade opcionales para la estructuración de XMLs de e-CF estándar, de consumo, anulaciones y acuses.

🛠️ Instalación

Instala el paquete mediante Composer:

composer require platinum-place/laravel-dgii

Publica el archivo de configuración opcional para endpoints y dominios:

php artisan vendor:publish --tag=dgii-config

🚀 Uso Rápido (vía Facades)

Toda interacción pública se realiza a través del Facade Dgii.

1. Obtener Semilla y Autenticarse

use PlatinumPlace\LaravelDgii\Facades\Dgii;

// 1. Obtener semilla limpia desde la DGII
$seedXml = Dgii::getSeed('testecf'); // testecf (sandbox), certecf (certificación), ecf (producción)

// 2. [Tu aplicación] Firma digitalmente el XML de la semilla y guárdalo en un archivo.
// 3. Intercambiar la semilla firmada por un access token oficial
$authInfo = Dgii::verifySeed('testecf', '/ruta/a/semilla_firmada.xml');

$accessToken = $authInfo['token'];

2. Generar y Firmar Facturas (e-CF)

Puedes usar las plantillas Blade del paquete o generar tu propio XML y firmarlo manualmente usando el SignManager integrado.

use PlatinumPlace\LaravelDgii\Facades\Dgii;

$invoiceData = [
    'IdDoc' => ['TipoeCF' => 31, 'eNCF' => 'E310000000001', ...],
    'Emisor' => [...],
    'Comprador' => [...],
    'DetallesItems' => [...]
];

$certContent = file_get_contents('/ruta/al/certificado.p12');
$certPassword = 'tu_contraseña';

// Genera el XML y aplica la firma digital PKCS#12
$result = Dgii::renderInvoice($certContent, $certPassword, $invoiceData);

// Contiene 'xml' (el string firmado) y opcionalmente 'integral'
$signedXml = $result['xml'];

// [Tu aplicación] Guarda el XML firmado donde prefieras en tu disco local o base de datos.

3. Enviar e-CF y Consultar Estatus

use PlatinumPlace\LaravelDgii\Facades\Dgii;

// 1. Enviar el XML firmado a la DGII (especificando el ambiente, token y archivo)
$result = Dgii::sendInvoice('testecf', $accessToken, '/ruta/al/comprobante_firmado.xml');

$trackId = $result['trackId'];

// 2. Consultar el estado de procesamiento del comprobante mediante el trackId
$status = Dgii::findInvoice('testecf', $accessToken, $trackId);

4. Consultar Estatus de Servicios de la DGII

Para estos métodos de disponibilidad, asegúrate de tener configurada tu DGII_API_KEY en tu .env.

use PlatinumPlace\LaravelDgii\Facades\Dgii;

// Consulta el estado general de disponibilidad de los servicios de la DGII
$services = Dgii::getServiceStatus();

// Consulta las ventanas de mantenimiento programadas por la DGII
$maintenance = Dgii::getMaintenanceWindows();

📖 Documentación Completa

⚖️ Licencia

Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.