PHPackages                             codersfree/laravel-greenter - 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. [PDF &amp; Document Generation](/categories/documents)
4. /
5. codersfree/laravel-greenter

ActiveLaravel-package[PDF &amp; Document Generation](/categories/documents)

codersfree/laravel-greenter
===========================

Laravel package for Greenter

v2.0.0(3mo ago)261.4k—5.6%7MITTwigPHP &gt;=8.1

Since Jun 12Pushed 3mo agoCompare

[ Source](https://github.com/codersfree/laravel-greenter)[ Packagist](https://packagist.org/packages/codersfree/laravel-greenter)[ Docs](https://github.com/codersfree/laravel-greenter)[ RSS](/packages/codersfree-laravel-greenter/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (9)Versions (6)Used By (0)

Laravel Greenter (v2)
=====================

[](#laravel-greenter-v2)

**Laravel Greenter** es un paquete para emitir **comprobantes electrónicos** desde Laravel utilizando [Greenter](https://github.com/thegreenter/greenter). Permite:

- Firmar comprobantes digitalmente
- Enviarlos a SUNAT (SEE o API REST)
- Gestionar respuestas estructuradas (CDRs)
- Generar XML firmados
- Generar su representación impresa en PDF (HTML y PDF)

[![MIT License](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)

📚 Tabla de Contenidos
---------------------

[](#-tabla-de-contenidos)

- [📦 Requisitos](#-requisitos)
- [🚀 Instalación](#-instalaci%C3%B3n)
- [⚙️ Configuración Inicial](#%EF%B8%8F-configuraci%C3%B3n-inicial)
    - [🏢 Datos de la Empresa Emisora](#-datos-de-la-empresa-emisora)
    - [🛠️ Cambiar a Producción](#%EF%B8%8F-cambiar-a-producci%C3%B3n)
- [🧰 Uso Básico](#-uso-b%C3%A1sico)
    - [🧾 Emisión de Comprobante Electrónico](#-emisi%C3%B3n-de-comprobante-electr%C3%B3nico)
    - [📨 Estructura de la Respuesta](#-estructura-de-la-respuesta)
    - [📤 Métodos disponibles (Getters)](#m%C3%A9todos-disponibles-getters)
    - [🔄 Convertir a Array](#convertir-a-array)
    - [🔁 Emisión Dinámica para Múltiples Empresas](#-emisi%C3%B3n-din%C3%A1mica-para-m%C3%BAltiples-empresas)
- [🔏 Gestión de XML](#-gesti%C3%B3n-de-xml)
    - [🧾 Generar XML Firmado](#generar-xml-firmado)
    - [📨 Enviar XML existente](#enviar-xml-existente)
- [🎨 Generar Representación Impresa](#-generar-representaci%C3%B3n-impresa)
    - [🧾 HTML](#-html)
    - [🖨️ PDF](#%EF%B8%8F-pdf)
    - [🛠️ Generar Reporte sin Enviar a SUNAT](#%EF%B8%8F-generar-reporte-sin-enviar-a-sunat)
- [📦 Otros Tipos de Comprobantes](#-otros-tipos-de-comprobantes)
    - [🎨 Personalizar Plantillas](#-personalizar-plantillas)
- [🧪 Facades Disponibles](#-facades-disponibles)
- [🔐 Seguridad Recomendada](#-seguridad-recomendada)
- [📄 Licencia](#-licencia)

📦 Requisitos
------------

[](#-requisitos)

Este paquete requiere:

- PHP &gt;= 8.1
- Laravel 11.x o superior
- Extensiones PHP: `soap`, `openssl`, `dom`, `xml`
- [wkhtmltopdf](https://wkhtmltopdf.org) (opcional, para generación de PDF)

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

[](#-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 paquete
- `public/images/logo.png`: logo usado en PDFs
- `public/certs/certificate.pem`: certificado digital de prueba

⚙️ Configuración Inicial
------------------------

[](#️-configuración-inicial)

### 🏢 Datos de la Empresa Emisora

[](#-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

[](#️-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' => 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
------------

[](#-uso-básico)

### 🧾 Emisión de Comprobante Electrónico

[](#-emisión-de-comprobante-electrónico)

Primero define los datos del comprobante:

```
$data = [
    "ublVersion" => "2.1",
    "tipoOperacion" => "0101", // Catálogo 51
    "tipoDoc" => "01", // Catálogo 01
    "serie" => "F001",
    "correlativo" => "1",
    "fechaEmision" => now(),
    "formaPago" => [
        'tipo' => 'Contado',
    ],
    "tipoMoneda" => "PEN", // Catálogo 02
    "client" => [
        "tipoDoc" => "6", // Catálogo 06
        "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", // Catálogo 03
            "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", // Catálogo 15
            "value" => "SON CIENTO DIECIOCHO CON 00/100 SOLES",
        ],
    ],
];
```

> ⚠️ **Importante:** Para saber qué datos debes enviar según el tipo de comprobante que estés emitiendo, te recomendamos revisar la documentación oficial de [greenter](https://greenter.dev)

Envía el comprobante a SUNAT:

```
use CodersFree\LaravelGreenter\Facades\Greenter;
use Illuminate\Support\Facades\Storage;

// Enviar a SUNAT
$response = Greenter::send('invoice', $data); //invoice, note, despatch, etc

// Guardar XML
$xml = $response->getXml();
if($xml)
{
    Storage::put("sunat/xml/{$name}.xml", $response->getXml());
}

//Guardamos CDR
if($response->getSunatResponse()->getSuccess())
{
    $cdrZip = $response->getSunatResponse()->getCdrZip();
    Storage::put("sunat/cdr/R-{$name}.zip", $cdrZip);
}
```

### 📨 Estructura de la Respuesta

[](#-estructura-de-la-respuesta)

El método Greenter::send() devuelve una instancia de SendResultDTO. Esta clase encapsula toda la información del proceso de firma y envío.

```
namespace CodersFree\LaravelGreenter\DTOs;

use Greenter\Model\DocumentInterface;

class SendResultDTO
{
    public function __construct(
        private ?DocumentInterface $document = null,
        private ?string $xml = null,
        private ?string $hash = null,
        private ?SunatResponseDto $sunatResponse = null,
    ) {
    }
}
```

```
