Guía Completa: Cómo Integrar Facturación Electrónica SUNAT con PHP 8.x, cPanel y Certificados Digitales
La facturación electrónica en el Perú es una obligación tributaria para personas naturales con negocio (RUC 10) y empresas (RUC 20). Desarrollar e implementar un sistema de emisión de comprobantes (Facturas, Boletas, Notas de Crédito, Guías de Remisión) bajo el estándar UBL 2.1 de SUNAT requiere un entorno de hosting robusto, con extensiones PHP específicas, gestión segura de certificados digitales
.pfxo.pemy rápida respuesta ante Web Services. En esta guía técnica aprenderás a configurar y desplegar tu sistema en cPanel sin errores 500 ni bloqueos.
1. Arquitectura del Flujo de Emisión SUNAT (UBL 2.1)#
El ciclo de vida de un comprobante electrónico sigue una secuencia estricta de validación y firma:
┌─────────────────────────────────────────────────────────────────────────────┐
│ FLUJO TÉCNICO DE FACTURACIÓN ELECTRÓNICA SUNAT │
├───────────────────┬───────────────────┬───────────────────┬─────────────────┤
│ PASO 1 │ PASO 2 │ PASO 3 │ PASO 4 │
│ Construcción │ Firma Digital │ Empaquetado ZIP │ Recepción CDR & │
│ del XML UBL 2.1 │ con Certificado │ y Envío SOAP a │ Almacenamiento │
│ (Datos y montos) │ .pfx / OpenSSL │ Web Service SUNAT │ en Disco NVMe │
└───────────────────┴───────────────────┴───────────────────┴─────────────────┘
- Generación del XML: Se arma la estructura XML según los esquemas XSD de SUNAT (versión UBL 2.1).
- Firma Digital: Se aplica el algoritmo de firma digital XMLDSig (SHA-256 / RSA) utilizando la clave privada del certificado tributario.
- Empaquetado y Envío: El archivo XML firmado se comprime en formato
.zipy se envía mediante el protocolo SOAP al Web Service de SUNAT o de un OSE (Operador de Servicios Electrónicos). - Respuesta CDR: SUNAT responde sincrónicamente con una Constancia de Recepción (CDR en formato ZIP) con código de estado 0 (Aceptado) o código de error.
2. Requisitos de Extensiones PHP en cPanel / CloudLinux#
Para que tu código en PHP (Laravel, Symfony, CodeIgniter o scripts nativos) pueda firmar y enviar comprobantes, debes activar las siguientes extensiones desde cPanel > Select PHP Version > Extensions:
| Extensión PHP | Función Principal en el Sistema de Facturación | Estado Requerido |
|---|---|---|
openssl |
Carga del certificado .pfx, extracción de clave privada y firmado criptográfico |
Obligatorio |
soap |
Comunicación con el Web Service SOAP de SUNAT (billService / sendBill) |
Obligatorio |
dom & xmlwriter |
Creación, manipulación y serialización de nodos XML UBL 2.1 | Obligatorio |
zip |
Compresión del XML en .zip para envío y extracción del CDR de respuesta |
Obligatorio |
curl |
Envío de peticiones HTTP/HTTPS seguras con soporte TLS 1.2 y TLS 1.3 | Obligatorio |
fileinfo |
Validación de tipos MIME para generación y descarga de PDFs | Recomendado |
[!NOTE] En PROISO Tech & Software Solutions, todas estas extensiones se encuentran preinstaladas y optimizadas en las versiones de PHP 8.1, 8.2 y 8.3.
3. Configuración de Directivas PHP (php.ini) en cPanel#
En cPanel > Select PHP Version > Options, ajusta los siguientes valores para evitar interrupciones durante el procesamiento masivo de facturas:
; Configuración recomendada para Facturación Electrónica SUNAT
memory_limit = 512M
max_execution_time = 300
upload_max_filesize = 32M
post_max_size = 32M
default_socket_timeout = 120
date.timezone = "America/Lima"
4. Ejemplo Práctico en PHP: Firma Digital del XML con OpenSSL#
A continuación, se muestra un fragmento representativo en PHP para extraer el certificado digital .pfx y firmar el documento:
<?php
// Cargar certificado digital .pfx
$pfxPath = __DIR__ . '/certificados/mi_empresa_ruc20.pfx';
$pfxPassword = 'tu_password_seguro';
$pfxContent = file_get_contents($pfxPath);
$certs = [];
if (!openssl_pkcs12_read($pfxContent, $certs, $pfxPassword)) {
throw new Exception('Error al leer el certificado digital PFX: ' . openssl_error_string());
}
$privateKey = $certs['pkey']; // Clave privada para firmar
$publicCert = $certs['cert']; // Certificado público X.509
echo "Certificado cargado exitosamente. Listo para firmar XML UBL 2.1.\n";
4.1 Envío del Comprobante vía SOAP Client#
<?php
// Endpoint oficial de SUNAT (Producción)
$wsUrl = 'https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService?wsdl';
$options = [
'soap_version' => SOAP_1_1,
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => 1,
'exceptions' => true,
'stream_context' => stream_context_create([
'ssl' => [
'verify_peer' => true,
'verify_peer_name' => true,
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT,
]
])
];
$client = new SoapClient($wsUrl, $options);
// Cabeceras de seguridad WS-Security con usuario secundario SOL (RUC + USUARIO)
// $client->sendBill(['fileName' => $zipName, 'contentFile' => $zipBase64]);
5. Solución de Errores Frecuentes con SUNAT#
- Error
SOAP-ERROR: Parsing WSDL:- Causa: Timeout de conexión hacia el servidor de SUNAT o bloqueo de salida por firewall.
- Solución: Aumentar
default_socket_timeouta 120 segundos y verificar que el puerto 443 saliente esté habilitado.
- Error
0156: El archivo no cumple con el formato XML:- Causa: Caracteres especiales (
&,<,>,") sin codificar o saltos de línea no conformes. - Solución: Usar
htmlspecialchars()en descripciones y nombres de productos.
- Causa: Caracteres especiales (
- Error
0200: No se pudo verificar la firma digital:- Causa: El certificado
.pfxestá vencido o la contraseña es incorrecta. - Solución: Validar la fecha de caducidad en cPanel o renovar el certificado digital tributario.
- Causa: El certificado
6. Automatización de Envío y Resúmenes Diarios con Cron Jobs#
Para el envío automático de resúmenes de boletas o comunicación de bajas, configura un Cron Job en cPanel:
# Ejecutar resumen diario de boletas a las 11:30 PM (Hora de Lima)
30 23 * * * /usr/local/bin/ea-php83 /home/tuusuario/public_html/cron/enviar_resumen_sunat.php >> /home/tuusuario/logs/sunat_cron.log 2>&1
7. Despliega tu Sistema de Facturación en PROISO Tech & Software Solutions#
Nuestros servidores cuentan con discos NVMe ultrarrápidos, aislamiento CloudLinux y soporte 24/7 en Perú para que tu empresa emita comprobantes sin retrasos ni caídas.
👉 ¿Necesitas asesoría técnica o soporte para configurar tu sistema SUNAT? Escríbenos por WhatsApp al +51 924 081 817 y te ayudamos a ponerlo en marcha.
¿Listo para potenciar tus aplicaciones con discos NVMe?
Servidores optimizados para NodeJS, Python y WordPress con LiteSpeed. Planes anuales desde S/ 60/año con SSL gratis y soporte directo 24/7 en Perú.
Artículos Recomendados
Ver todos
Desarrollo de Software a Medida para Empresas: La Metodología Ágil de Brenda
Descubre cómo creamos plataformas web, aplicaciones SaaS e integraciones
Cómo Comprar Hosting en Cusco con Facturación en Soles, Yape y Activación Inmediata
Guía paso a paso para adquirir hosting NVMe de alto rendimiento en Cusco:
Contratar Hosting en Perú con Factura Electrónica SUNAT y Pago en Soles por
Aprende a contratar hosting NVMe en Perú pagando fácilmente en Soles con
