VeriFactu en PrestaShop.
El pago confirmado dispara la factura en AEAT.
PrestaShop es la segunda plataforma más usada en España y la que más preguntas genera sobre VeriFactu, porque sus facturas nativas no lo cumplen. Cofactu no tiene módulo en Addons; tiene un webhook, y el hook actionPaymentConfirmation de PrestaShop es el sitio natural para llamarlo.
Sin módulo en Addons · webhook operativo. Hoy no hay módulo de Cofactu para instalar desde PrestaShop Addons, ni fecha para tenerlo. Lo que funciona es el webhook universal, llamado desde un módulo mínimo propio como el de abajo o desde Make.
¿Qué puedes conectar hoy
entre PrestaShop y Cofactu?
Hoy no hay módulo de Cofactu para instalar desde PrestaShop Addons, ni fecha para tenerlo. Lo que funciona es el webhook universal, llamado desde un módulo mínimo propio como el de abajo o desde Make.
| Camino | Hoy | Qué hace |
|---|---|---|
| Plugin, módulo o app de Cofactu en PrestaShop Addons | No disponible | No existe ni tiene fecha. No hay nada de Cofactu que instalar en la tienda. |
| Webhook universal | Disponible | Factura cada pedido que le mandes y lo envía a AEAT con tu certificado. Necesita una API key: desde el plan Pyme o en la prueba de 30 días. |
| Conexión directa del catálogo | No disponible | Solo existe para WooCommerce y Shopify. |
| Make o Zapier | Disponible | Con su módulo HTTP contra el webhook. Cofactu no tiene app propia en Make ni en Zapier. |
Revisado el 26 de octubre de 2026 · Lo que no está disponible no tiene fecha
Del pedido pagado en PrestaShop
a la factura registrada.
- 01
Pedido pagado en tu tienda
PrestaShop dispara su evento de pago, como ya hace hoy.
- 02
Un POST al webhook de Cofactu
Desde el hook nativo o desde Make. JSON normalizado, API key en la cabecera.
- 03
Factura encadenada
Cofactu numera, calcula la huella SHA-256 encadenada y genera el PDF con QR.
- 04
Registrada en AEAT
Con tu certificado, el registro sale a AEAT en segundo plano y guarda el CSV de respuesta.


actionPaymentConfirmation
Se dispara cuando el pedido pasa a un estado de pago aceptado. Un módulo mínimo que registre este hook basta; no hace falta tocar el core ni los overrides.
<?php
// modules/cofactuverifactu/cofactuverifactu.php
class CofactuVerifactu extends Module
{
public function install(): bool
{
return parent::install() && $this->registerHook('actionPaymentConfirmation');
}
public function hookActionPaymentConfirmation(array $params): void
{
$order = new Order((int) $params['id_order']);
$customer = new Customer((int) $order->id_customer);
$address = new Address((int) $order->id_address_invoice);
$lines = [];
foreach ($order->getProducts() as $p) {
$lines[] = [
'descripcion' => $p['product_name'],
'cantidad' => (float) $p['product_quantity'],
'precioUnitario' => (float) $p['unit_price_tax_excl'],
'tipoIva' => (float) $p['tax_rate'],
];
}
$ch = curl_init('https://api.cofactu.com/api/webhooks/ecommerce-orders');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . Configuration::get('COFACTU_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'platform' => 'prestashop',
'externalOrderId' => $order->reference,
'client' => $address->dni ? [
'nif' => $address->dni,
'nombre' => $address->company ?: $customer->firstname . ' ' . $customer->lastname,
'email' => $customer->email,
'direccion' => $address->address1,
'codigoPostal' => $address->postcode,
'ciudad' => $address->city,
'pais' => Country::getIsoById((int) $address->id_country),
] : null, // F2 simplificada
'lines' => $lines,
]),
]);
curl_exec($ch);
curl_close($ch);
}
}
Sin tocar PHP: Make
-
Paso 1
Crea una API key en Cofactu (Configuración → API keys) con permiso para crear facturas. La API va incluida desde el plan Pyme y en la prueba de 30 días.

-
Paso 2
En Make, módulo «PrestaShop → Watch Orders» (usa el webservice de PrestaShop; actívalo en Parámetros avanzados → Webservice).

-
Paso 3
Módulo HTTP: POST a https://api.cofactu.com/api/webhooks/ecommerce-orders con Authorization: Bearer vf_live_….

-
Paso 4
Mapea reference a externalOrderId y las líneas del pedido a lines con unit_price_tax_excl y tax_rate.

Un solo formato para todas las tiendas
POST https://api.cofactu.com/api/webhooks/ecommerce-orders con Authorization: Bearer vf_live_…. Precios sin IVA y tipoIva por línea; client: null emite una factura simplificada F2; externalOrderId hace la llamada idempotente. Desde Configuración → Integraciones → Ecommerce se lanza un pedido de prueba, que queda en borrador; los pedidos reales aparecen en Facturas con su estado en AEAT.
Configuración → Integraciones → Ecommerce ↗{
"platform": "prestashop",
"externalOrderId": "2026-000123",
"client": {
"nif": "B12345678",
"nombre": "Tienda Ejemplo SL",
"email": "compras@ejemplo.com",
"direccion": "C/ Mayor 1",
"codigoPostal": "28001",
"ciudad": "Madrid",
"pais": "ES"
},
"lines": [
{
"descripcion": "Zapatillas running 42",
"cantidad": 1,
"precioUnitario": 79.34,
"tipoIva": 21
},
{
"descripcion": "Gastos de envío",
"cantidad": 1,
"precioUnitario": 4.13,
"tipoIva": 21
}
],
"autoSubmit": true
} PrestaShop y VeriFactu, en corto
¿Las facturas que genera PrestaShop cumplen VeriFactu?
No. PrestaShop numera y genera un PDF, pero no calcula la huella encadenada, no imprime el QR de verificación ni registra nada en AEAT. Desde 2027 esa factura no es válida como registro de facturación; la tienda puede seguir siendo PrestaShop, la factura la emite un sistema VeriFactu.
¿Hay módulo de Cofactu en PrestaShop Addons?
No, y no tiene fecha. El módulo mínimo de esta página (un hook y un POST) es lo que haría un módulo publicado, y Make lo sustituye sin código.
¿Funciona en PrestaShop 1.6?
El hook actionPaymentConfirmation existe desde 1.5, así que el mismo módulo debería servir. Pero 1.6 lleva sin soporte de seguridad desde 2019, y el ejemplo de esta página está escrito para 1.7 y 8.
¿Qué campo de PrestaShop es el NIF?
El dni de la dirección de facturación, que PrestaShop pide según el país. Si está vacío, manda client: null y Cofactu emite factura simplificada F2.
¿Se duplica la factura si el hook se ejecuta dos veces?
No: el webhook es idempotente por platform + externalOrderId, y la referencia del pedido de PrestaShop es única. El JSON es el mismo para las cuatro tiendas: platform, externalOrderId, client (o null para una factura simplificada F2) y lines con precio sin IVA y tipoIva por línea.
Otras plataformas
Tu tienda sigue siendo PrestaShop.
La factura, VeriFactu.
30 días con todo Cofactu, API incluida y sin tarjeta, y un pedido de prueba para ver la primera factura encadenada. Después, la API va desde el plan Pyme.







