Volver a todos los artículos
Hosting PerúDesarrollo WebFacturación Electrónica

Guía Completa: Cómo Integrar Facturación Electrónica SUNAT con PHP 8.x, cPanel y Certificados Digitales

PROISO Tech & Software Solutions
5 min de lectura
Guía Completa: Cómo Integrar Facturación Electrónica SUNAT con PHP 8.x, cPanel y Certificados Digitales
Tutorial paso a paso para desplegar sistemas de facturación electrónica SUNAT en cPanel: firma XML con certificado digital .pfx, extensiones SOAP/OpenSSL y envío a OSE/SUNAT sin bloqueos.

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 .pfx o .pem y 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:

code
┌─────────────────────────────────────────────────────────────────────────────┐
│                 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   │
└───────────────────┴───────────────────┴───────────────────┴─────────────────┘
  1. Generación del XML: Se arma la estructura XML según los esquemas XSD de SUNAT (versión UBL 2.1).
  2. Firma Digital: Se aplica el algoritmo de firma digital XMLDSig (SHA-256 / RSA) utilizando la clave privada del certificado tributario.
  3. Empaquetado y Envío: El archivo XML firmado se comprime en formato .zip y se envía mediante el protocolo SOAP al Web Service de SUNAT o de un OSE (Operador de Servicios Electrónicos).
  4. 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:

ini
; 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
<?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
<?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#

  1. 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_timeout a 120 segundos y verificar que el puerto 443 saliente esté habilitado.
  2. 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.
  3. Error 0200: No se pudo verificar la firma digital:
    • Causa: El certificado .pfx está vencido o la contraseña es incorrecta.
    • Solución: Validar la fecha de caducidad en cPanel o renovar el certificado digital tributario.

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:

bash
# 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.

Tecnologías y Temas Relacionados
facturacion electronica sunatphp facturacion sunatcpanel sunat apihosting facturacion perucertificado digital pfx
Compartir:WhatsAppTwitterLinkedIn
Hosting Anual de Alta Velocidad

¿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ú.