codersfree / laravel-greenter
Laravel package for Greenter
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 13
Watchers: 0
Forks: 2
Open Issues: 0
Language:Twig
Type:laravel-package
Requires
- php: >=8.1
- codersfree/report: ^1.0
- greenter/htmltopdf: ^5.1
- greenter/lite: ^5.1
- illuminate/console: ^10.0|^11.0|^12.0
- illuminate/contracts: ^10.0|^11.0|^12.0
- illuminate/filesystem: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
- illuminate/view: ^10.0|^11.0|^12.0
Requires (Dev)
- phpunit/phpunit: ^10.0
Suggests
- laravel/telescope: Recomendado para depuración durante el desarrollo
README
Laravel Greenter es un paquete para emitir comprobantes electrónicos desde Laravel utilizando Greenter. Permite:
- Firmar comprobantes digitalmente
- Enviarlos a SUNAT (SEE o API REST)
- Generar su representación impresa en PDF (HTML y PDF)
📚 Tabla de Contenidos
- 📦 Requisitos
- 🚀 Instalación
- ⚙️ Configuración Inicial
- 🧰 Uso Básico
- 📦 Otros Tipos de Comprobantes
- 🎨 Generar Representación Impresa
- 🧪 Facades Disponibles
- 🧱 Estructura del Paquete
- 🔐 Seguridad Recomendada
- 📄 Licencia
📦 Requisitos
Este paquete requiere:
- PHP >= 8.1
- Laravel 11.x o superior
- Extensiones PHP:
soap
,openssl
- wkhtmltopdf (opcional, para generación de PDF)
🚀 Instalación
Instala el paquete con Composer:
composer require codersfree/laravel-greenter
Publica los archivos de configuración y recursos:
php artisan vendor:publish --tag=greenter-laravel
Esto generará:
config/greenter.php
: configuración principal del paquetepublic/images/logo.png
: logo usado en PDFspublic/certs/certificate.pem
: certificado digital de prueba
⚙️ Configuración Inicial
🏢 Datos de la Empresa Emisora
En config/greenter.php
, configura los datos de la empresa emisora:
'company' => [ 'ruc' => '20000000001', 'razonSocial' => 'GREEN SAC', 'nombreComercial' => 'GREEN', 'address' => [ 'ubigeo' => '150101', 'departamento' => 'LIMA', 'provincia' => 'LIMA', 'distrito' => 'LIMA', 'direccion' => 'Av. Villa Nueva 221', ], ]
🛠️ Cambiar a Producción
Cuando estés listo para pasar a producción, edita el archivo config/greenter.php
, cambia el valor de mode
a 'prod'
y reemplaza las credenciales de prueba por las credenciales reales proporcionadas por SUNAT:
'mode' => 'prod', 'company' => [ 'certificate' => file_get_contents(public_path('certs/certificate.pem')), 'clave_sol' => [ 'user' => 'USUARIO_SOL', 'password' => 'CLAVE_SOL', ], 'credentials' => [ 'client_id' => '...', 'client_secret' => '...', ], ],
⚠️ Importante: Nunca subas tus certificados o credenciales a tu repositorio. Usa variables de entorno.
🧰 Uso Básico
🧾 Emisión de Comprobante Electrónico
Primero define los datos del comprobante:
$data = [ "ublVersion" => "2.1", "tipoOperacion" => "0101", "tipoDoc" => "01", // 01 = Factura "serie" => "F001", "correlativo" => "1", "fechaEmision" => "2025-06-12", "formaPago" => [ 'tipo' => 'Contado', ], "tipoMoneda" => "PEN", "client" => [ "tipoDoc" => "6", "numDoc" => "20000000001", "rznSocial" => "EMPRESA X", ], "mtoOperGravadas" => 100.00, "mtoIGV" => 18.00, "totalImpuestos" => 18.00, "valorVenta" => 100.00, "subTotal" => 118.00, "mtoImpVenta" => 118.00, "details" => [ [ "codProducto" => "P001", "unidad" => "NIU", "cantidad" => 2, "mtoValorUnitario" => 50.00, "descripcion" => "PRODUCTO 1", "mtoBaseIgv" => 100, "porcentajeIgv" => 18.00, "igv" => 18.00, "tipAfeIgv" => "10", "totalImpuestos" => 18.00, "mtoValorVenta" => 100.00, "mtoPrecioUnitario" => 59.00, ], ], "legends" => [ [ "code" => "1000", "value" => "SON CIENTO DIECIOCHO CON 00/100 SOLES", ], ], ];
Envía el comprobante a SUNAT:
use CodersFree\LaravelGreenter\Facades\Greenter; use Illuminate\Support\Facades\Storage; try { $response = Greenter::send('invoice', $data); $name = $response->getDocument()->getName(); Storage::put("sunat/xml/{$name}.xml", $response->getXml()); Storage::put("sunat/cdr/{$name}.zip", $response->getCdrZip()); return response()->json([ 'success' => true, 'cdrResponse' => $response->readCdr(), 'xml' => Storage::url("sunat/xml/{$name}.xml"), 'cdr' => Storage::url("sunat/cdr/{$name}.zip"), ]); } catch (\Throwable $e) { return response()->json([ 'success' => false, 'code' => $e->getCode(), 'message' => $e->getMessage(), ], 500); }
🔁 Emisión Dinámica para Múltiples Empresas
Puedes emitir comprobantes desde distintas empresas sin cambiar archivos de configuración:
$data = [ ... ]; // Datos del comprobante $response = Greenter::setCompany([ 'ruc' => '20999999999', 'razonSocial' => 'Otra Empresa SAC', 'certificate' => file_get_contents(public_path('certs/otro_cert.pem')), // Otros datos... ])->send('invoice', $data);
📦 Otros Tipos de Comprobantes
Además de facturas, puedes emitir:
Tipo de Comprobante | Código | Descripción |
---|---|---|
Factura | invoice |
Factura electrónica (01) |
Boleta | invoice |
Boleta de venta (03) |
Nota de Crédito | note |
Nota de crédito electrónica (07) |
Nota de Débito | note |
Nota de débito electrónica (08) |
Guía de Remisión | despatch |
Guía de remisión electrónica |
Resumen Diario | summary |
Resumen diario de boletas (RC) |
Comunicación de Baja | voided |
Comunicación de baja (RA) |
Retención | retention |
Comprobante de retención |
Percepción | perception |
Comprobante de percepción |
Consulta la documentación de Greenter para ver los campos específicos de cada uno.
🎨 Generar Representación Impresa
🧾 HTML
$data = [ ... ]; $response = Greenter::send('invoice', $data); $html = GreenterReport::generateHtml($response->getDocument());
Es necesario tener wkhtmltopdf instalado en el sistema para generar archivos PDF. Una vez instalado, configura la ruta del ejecutable en el archivo config/greenter.php
:
'report' => [ 'bin_path' => '/usr/local/bin/wkhtmltopdf', ],
$data = [ ... ]; $response = Greenter::send('invoice', $data); $pdf = GreenterReport::generatePdf($response->getDocument()); Storage::put("sunat/pdf/{$name}.pdf", $pdf);
✏️ Modificar Parámetros y Opciones
Parámetros adicionales:
$html = GreenterReport::setParams([ 'system' => [ 'logo' => public_path('images/logo.png'), 'hash' => '', ], 'user' => [ 'header' => 'Telf: <b>(01) 123456</b>', 'extras' => [ ['name' => 'CONDICIÓN DE PAGO', 'value' => 'Contado'], ['name' => 'VENDEDOR', 'value' => 'VENDEDOR PRINCIPAL'], ], 'footer' => '<p>Nro Resolución: <b>123456789</b></p>', ] ])->generateHtml($response->getDocument());
Opciones de generación:
$html = GreenterReport::setOptions([ 'no-outline', 'viewport-size' => '1280x1024', 'page-width' => '21cm', 'page-height' => '29.7cm', ])->generateHtml($response->getDocument());
🎨 Personalizar Plantillas
Publica las plantillas del reporte:
php artisan vendor:publish --tag=greenter-templates
Ubicación por defecto:
resources/views/vendor/laravel-greenter
Puedes personalizar y cambiar la ruta:
'report' => [ 'template' => resource_path('templates/laravel-greenter'), ],
🧪 Facades Disponibles
Alias | Función principal |
---|---|
Greenter |
Firma y envía comprobantes electrónicos |
GreenterReport |
Genera HTML o PDF de la representación impresa |
🧱 Estructura del Paquete
Ejemplos de métodos disponibles:
Greenter::send('invoice', $data); GreenterReport::generateHtml($document); GreenterReport::generatePdf($document);
🔐 Seguridad Recomendada
- Usa
.env
para tus claves y certificados - Nunca subas archivos sensibles al repositorio
- Protege rutas usando
storage_path()
oconfig_path()
- Valida los datos antes de emitir comprobantes
📄 Licencia
Este paquete está bajo licencia MIT. Desarrollado por CodersFree