"Si tú no trabajas por tus sueños, alguien te contratará para que trabajes por los suyos”

Steve Jobs

Afiliado
Dominios3Euros


Hoja de Ruta para Implementar Factura Electrónica y VeriFactu en TPVFOX (PHP)

Punto a seguir.

 

1. Requisitos Previos

Antes de comenzar, asegúrate de cumplir con estos requisitos:

Entender la normativa:

Tecnologías necesarias:

  • PHP 7.4+ o PHP 8.x

  • Extensiones necesarias: openssl, soap, xml, json

  • API VeriFactu: Documentación de Nemon.io

  • Generación de XML (FacturaE)

  • Firma digital XAdES con OpenSSL


2. Diseño de la Solución

Para integrar Factura Electrónica y VeriFactu en TPVFOX, hay que seguir estos pasos:

1️⃣ Generar facturas en formato XML (FacturaE) y JSON (VeriFactu)
2️⃣ Firmar digitalmente las facturas (XAdES con OpenSSL)
3️⃣ Enviar las facturas a la API de VeriFactu
4️⃣ Registrar la trazabilidad y auditoría de las facturas


3. Implementación Paso a Paso en PHP

Paso 1: Adaptar la Base de Datos

Objetivo: Modificar la base de datos de TPVFOX para soportar VeriFactu y Factura Electrónica.

ALTER TABLE facturas ADD COLUMN verifactu_hash VARCHAR(256);
ALTER TABLE facturas ADD COLUMN facturae_xml TEXT;
ALTER TABLE facturas ADD COLUMN enviado_a_hacienda BOOLEAN DEFAULT FALSE;

Paso 2: Generar Factura Electrónica en XML (FacturaE)

Objetivo: Crear facturas en formato FacturaE 3.2 o superior utilizando PHP.

function generarFacturaE($numero, $cliente, $total) {
    $xml = new SimpleXMLElement('<Factura></Factura>');
    $xml->addChild('Numero', $numero);
    $xml->addChild('Cliente', $cliente);
    $xml->addChild('Total', $total);
    return $xml->asXML();
}

// Ejemplo de uso
$xmlFactura = generarFacturaE("F2025001", "Empresa XYZ", "150.00");
file_put_contents("factura.xml", $xmlFactura);

Paso 3: Firmar Digitalmente la Factura con XAdES

Objetivo: Usar OpenSSL para firmar las facturas y cumplir con FacturaE.

function firmarFactura($xmlFile, $certFile, $keyFile) {
    $xml = file_get_contents($xmlFile);
    $privateKey = openssl_pkey_get_private(file_get_contents($keyFile));
    $cert = file_get_contents($certFile);

    openssl_sign($xml, $signature, $privateKey, OPENSSL_ALGO_SHA256);
    $signedXml = $xml . "\n<Firma>" . base64_encode($signature) . "</Firma>";

    return $signedXml;
}

// Uso
$signedFactura = firmarFactura("factura.xml", "certificado.pem", "clave_privada.pem");
file_put_contents("factura_firmada.xml", $signedFactura);

Paso 4: Generar JSON para VeriFactu

Objetivo: Crear una factura en formato JSON para enviarla a VeriFactu.

function generarJsonVeriFactu($numero, $cliente, $total) {
    $data = [
        "factura_numero" => $numero,
        "fecha_emision" => date("Y-m-d"),
        "cliente" => $cliente,
        "total" => $total,
        "hash" => hash("sha256", $numero . $cliente . $total)
    ];
    return json_encode($data, JSON_PRETTY_PRINT);
}

// Uso
$jsonFactura = generarJsonVeriFactu("F2025001", "Empresa XYZ", 150.00);
file_put_contents("factura.json", $jsonFactura);

Paso 5: Enviar Factura a VeriFactu (API REST)

Objetivo: Conectar con la API VeriFactu y enviar la factura.

function enviarFacturaVeriFactu($jsonFactura) {
    $apiUrl = "https://api.nemon.io/verifactu/enviar";
    $token = "TU_TOKEN_AQUI"; // Obtener desde el panel de Nemon.io

    $ch = curl_init($apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer $token",
        "Content-Type: application/json"
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonFactura);

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

// Uso
$jsonFactura = file_get_contents("factura.json");
$response = enviarFacturaVeriFactu($jsonFactura);
echo $response;

Paso 6: Validar y Probar la Implementación

Objetivo: Asegurar que el sistema funcione correctamente.

Validar XML FacturaE con herramientas de la Agencia Tributaria.
Enviar facturas de prueba a la API VeriFactu.
Verificar que las facturas no sean alterables después de emitidas.


4. Despliegue y Monitorización

Para un despliegue exitoso:

Configurar logs de auditoría (guardar cada factura enviada).
Registrar los errores de la API VeriFactu.
Actualizar el sistema según nuevas normativas.


5. Conclusión

Implementar Factura Electrónica y VeriFactu en TPVFOX con PHP requiere:
Generar XML FacturaE y JSON VeriFactu.
Firmar facturas digitalmente con XAdES (OpenSSL).
Enviar facturas a la API de VeriFactu.
Asegurar la inmutabilidad y trazabilidad.

Si eres programador y necesitas ayuda, deja un comentario.


¡Listo! Esta versión no incluye iconos y está optimizada para evitar el error. ¿Te gustaría ajustar algún detalle más?