Ambiente Beta de SUNAT
El ambiente beta (o de pruebas) de SUNAT te permite probar la emisión de comprobantes electrónicos sin afectar documentos reales. Es el entorno ideal para desarrollo y pruebas antes de pasar a producción.
Todo comprobante emitido en el ambiente beta es solo para pruebas y no tiene validez tributaria.
Configuración del Ambiente Beta
1. Configurar el Modo en la Empresa
En el registro de tu empresa, establece el campo modo como 'beta':
$empresa -> modo = 'beta' ;
$empresa -> save ();
Cuando una empresa está en modo beta, el sistema automáticamente:
Usa los endpoints beta de SUNAT
Utiliza las credenciales de prueba proporcionadas por SUNAT
Usa el RUC de prueba en lugar del RUC real de la empresa
2. Credenciales de Prueba
SUNAT proporciona credenciales estándar para pruebas configuradas en config/sunat.php:
'beta' => [
'ruc' => '20000000001' ,
'usuario_sol' => 'MODDATOS' ,
'clave_sol' => 'moddatos' ,
],
Credenciales de prueba:
RUC: 20000000001
Usuario SOL: MODDATOS
Clave SOL: moddatos
Estas credenciales son públicas y proporcionadas por SUNAT para todos los desarrolladores.
3. Endpoints Beta
El sistema utiliza los siguientes endpoints beta de SUNAT:
Facturación (Facturas, Boletas, Notas):
https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService
Guías de Remisión:
https://e-beta.sunat.gob.pe/ol-ti-itemision-guia-gem-beta/billService
GRE API (Guías Electrónicas REST):
Auth: https://api-seguridad.sunat.gob.pe/v1
CPE: https://api-cpe.sunat.gob.pe/v1
Los endpoints de GRE API son los mismos para beta y producción. La diferencia está en las credenciales utilizadas.
Certificado Digital de Prueba
Para firmar los XML en el ambiente beta, necesitas un certificado digital. Puedes:
Usar el certificado global de prueba (recomendado para desarrollo):
Ubicado en storage/app/sunat/certificados/cert.pem
Configurado en config/sunat.php
Usar un certificado específico por empresa :
Guardar en storage/app/sunat/certificados/{RUC}-cert.pem
El sistema lo detectará automáticamente
// El servicio busca el certificado en este orden:
// 1. storage/app/sunat/certificados/{RUC}-cert.pem
// 2. El certificado global configurado en config/sunat.php
El certificado de prueba NO debe usarse en producción. Genera un certificado válido con tu RUC real antes de pasar a producción.
Probando la Integración
Emitir una Factura de Prueba
use App\Services\ SunatService ;
$sunatService = new SunatService ();
// Generar XML
$resultado = $sunatService -> generarXml ( $venta );
// Resultado: ['success' => true, 'nombre_archivo' => '...', 'hash' => '...']
// Enviar a SUNAT
$respuesta = $sunatService -> enviarComprobante ( $venta );
// Respuesta exitosa: ['success' => true, 'codigo' => '0', 'mensaje' => 'La Factura...ha sido aceptada']
Emitir una Guía de Remisión (GRE)
// Generar XML
$resultado = $sunatService -> generarGuiaRemisionXml ( $guia );
// Enviar a SUNAT (retorna ticket)
$respuesta = $sunatService -> enviarGuiaRemision ( $guia );
// Resultado: ['success' => true, 'ticket' => '123456789']
// Consultar estado con el ticket
$estado = $sunatService -> consultarTicketGuia ( $guia );
// Si está procesado: ['success' => true, 'codigo' => '0', 'mensaje' => 'Guía aceptada...']
// Si aún está en proceso: ['success' => true, 'codigo' => '98', 'en_proceso' => true]
Emitir Boletas (requiere Resumen Diario)
// 1. Generar y enviar boletas normalmente
$sunatService -> generarXml ( $boleta );
// 2. Al final del día, enviar resumen diario
$boletas = Venta :: where ( 'serie' , 'B001' )
-> whereDate ( 'fecha_emision' , today ())
-> get ();
$resumen = $sunatService -> resumenDiario (
$empresa ,
$boletas ,
today () -> format ( 'Y-m-d' ),
'001' // Correlativo
);
// Resultado: ['success' => true, 'ticket' => '...']
// 3. Consultar ticket del resumen
$estado = $sunatService -> consultarTicket ( $empresa , $resumen [ 'ticket' ]);
Datos de Prueba Recomendados
Clientes de Prueba
Cliente con RUC:
RUC: 20100070970
Razón Social: CLIENTE DE PRUEBA SAC
Cliente con DNI:
DNI: 12345678
Nombre: CLIENTE DE PRUEBA
Series de Prueba
Facturas: F001, F002
Boletas: B001, B002
Notas de Crédito: FC01, BC01
Notas de Débito: FD01
Guías de Remisión: T001
Verificar Respuestas de SUNAT
Respuesta Exitosa
Cuando un comprobante es aceptado:
[
'success' => true ,
'codigo' => '0' ,
'mensaje' => 'La Factura numero F001-00000123 ha sido aceptada' ,
'cdr_url' => 'sunat/cdr/20000000001/R-20000000001-01-F001-00000123.zip'
]
Respuesta con Error
Cuando hay un error:
[
'success' => false ,
'codigo' => '2324' ,
'message' => 'El número de RUC del archivo no corresponde con el RUC del certificado digital'
]
Los códigos de error son los mismos en beta y producción. Consulta la página de Solución de Problemas para ver errores comunes.
Archivos Generados
En modo beta, todos los archivos se guardan usando el RUC de prueba 20000000001:
storage/app/sunat/
├── xml/
│ └── 20000000001/
│ ├── 20000000001-01-F001-00000001.xml
│ └── 20000000001-03-B001-00000001.xml
├── cdr/
│ └── 20000000001/
│ ├── R-20000000001-01-F001-00000001.zip
│ └── R-20000000001-03-B001-00000001.zip
└── certificados/
└── cert.pem
Limitaciones del Ambiente Beta
Limitaciones importantes:
Los comprobantes no tienen validez tributaria
El servicio puede ser inestable o tener tiempos de respuesta lentos
SUNAT puede reiniciar o limpiar los datos sin previo aviso
No se debe usar para emitir comprobantes reales
Transición a Producción
Cuando estés listo para pasar a producción:
Verifica que todos los flujos funcionen correctamente en beta
Obtén tu certificado digital válido
Configura tus credenciales SOL reales
Cambia el modo de la empresa a producción
Consulta la página Ambiente de Producción para más detalles.
Siguientes Pasos
Producción Configura el ambiente de producción
Solución de Problemas Resuelve errores comunes