Requisitos para Facturación Electrónica
Para emitir comprobantes electrónicos válidos ante SUNAT se requiere:- Certificado Digital (.pem): Para firmar electrónicamente los XML
- Credenciales SOL: Usuario y clave para autenticación en servicios SUNAT
- RUC activo con el sistema de emisión electrónica habilitado
Obtención del Certificado Digital
Opción 1: SUNAT (Gratuito)
Solicitar certificado en SUNAT
- Ingrese a SUNAT Operaciones en Línea con Clave SOL
- Vaya a Comprobantes de Pago → Certificados Digitales
- Seleccione Solicitar Certificado Digital Gratuito
- Complete el formulario con datos del representante legal
- Descargue el certificado en formato .pfx (archivo con contraseña)
Convertir .pfx a .pem
El sistema requiere el certificado en formato .pem. Use OpenSSL para convertir:
Al ejecutar estos comandos, se le solicitará:
- Import Password: Contraseña del .pfx (proporcionada por SUNAT)
- PEM pass phrase: Nueva contraseña para la llave privada (puede dejarla vacía para uso en servidor)
Opción 2: Entidad Certificadora (Pagado)
Certificados de mayor seguridad emitidos por:- RENIEC (Perú)
- eCertiPeruana
- Digicert
- GlobalSign
Instalación del Certificado en el Sistema
Ubicar directorio de certificados
Los certificados se almacenan en:Esta ruta está configurada en
config/sunat.php (línea 40):Subir el archivo .pem
Suba el certificado con el siguiente formato de nombre:Ejemplo:El sistema buscará automáticamente el certificado de la empresa en base a su RUC.
Permisos de archivo: Asegúrese de que el archivo tenga permisos de lectura:Esto previene acceso no autorizado al certificado.
Configuración de Credenciales SOL
En Modo Producción
Acceder a configuración de empresa
Vaya a Configuración → Datos de Empresa (o edite directamente en la base de datos).
En Modo Beta (Pruebas)
Para usar el entorno de pruebas de SUNAT, configure:config/sunat.php (línea 14-18):
En modo beta, el RUC real de la empresa se reemplaza por
20000000001 en los XML generados. Los documentos NO tienen validez tributaria.Configuración Especial para Guías de Remisión (GRE)
Las guías de remisión electrónicas usan la API REST de SUNAT GRE que requiere credenciales OAuth separadas.Obtener Client ID y Client Secret
- Solicite las credenciales GRE en SUNAT Operaciones en Línea
- Configure en la tabla
empresas:
Fallback a Configuración Global
Si la empresa no tiene credenciales GRE propias, el sistema usa las configuradas en.env:
config/sunat.php (línea 31-34):
Código de Lectura de Certificado
EnSunatService.php (línea 67-81):
Configuración del Objeto See (Greenter)
EnSunatService.php (línea 42-59), el servicio configura Greenter con el certificado:
Endpoints de SUNAT
Configurados enconfig/sunat.php (línea 20-29):
Validación del Certificado
Para verificar que el certificado está correctamente configurado:1. Verificar fecha de expiración
2. Verificar sujeto del certificado
3. Probar firma de un XML
Genere un XML de prueba para verificar que la firma funciona:Solución de Problemas
Error: 'No se encontró certificado PEM para la empresa'
Error: 'No se encontró certificado PEM para la empresa'
Causa: El archivo .pem no existe en la ruta esperada.Solución:
-
Verifique que el archivo exista:
-
Verifique que el nombre sea correcto (RUC exacto +
-cert.pem) -
Verifique permisos de lectura:
Error SUNAT: 'Firma inválida' (código 2335)
Error SUNAT: 'Firma inválida' (código 2335)
Causa: El certificado no coincide con el RUC o está mal formado.Solución:
-
Verifique que el certificado corresponda al RUC de la empresa:
El CN debe ser el RUC correcto.
-
Verifique que el certificado no haya expirado:
-
Asegúrese de que el .pem incluya tanto el certificado como la llave privada:
Error SUNAT: 'Certificado revocado'
Error SUNAT: 'Certificado revocado'
Causa: El certificado fue revocado por SUNAT o la entidad emisora.Solución:
- Verifique el estado en SUNAT Operaciones en Línea
- Solicite un nuevo certificado
- Actualice el archivo .pem en el servidor
Error: 'SOAP-ERROR: Parsing WSDL'
Error: 'SOAP-ERROR: Parsing WSDL'
Causa: Problema de conexión al endpoint de SUNAT.Solución:
- Verifique que el servidor tenga acceso a internet
- Verifique que el endpoint esté correcto en
config/sunat.php - Pruebe la conectividad: