WooCommerce · WordPress
WooCommerce mueve la mayoría del ecommerce pequeño en España y su sistema de hooks está hecho para esto. No hay plugin de Cofactu en WordPress.org todavía; hay un webhook y un `add_action` que lo llama. Si prefieres no tocar PHP, Make o Zapier hacen lo mismo.
WooCommerce dispara su evento de pago, como ya hace hoy.
Desde el hook nativo o desde Make. JSON normalizado, API key en la cabecera.
Cofactu numera, calcula la huella SHA-256 encadenada y genera el PDF con QR.
Con tu certificado, el registro sale a AEAT en segundo plano y guarda el CSV de respuesta.
Con código · el hook nativo
Se dispara cuando la pasarela confirma el cobro. Para pedidos contra reembolso o transferencia, usa además woocommerce_order_status_completed. Guarda el fichero en wp-content/mu-plugins/ y se carga solo.
<?php
// wp-content/mu-plugins/cofactu-verifactu.php
add_action('woocommerce_payment_complete', function (int $order_id): void {
$order = wc_get_order($order_id);
$lines = [];
foreach ($order->get_items() as $item) {
$subtotal = (float) $item->get_subtotal(); // sin IVA
$tax = (float) $item->get_subtotal_tax();
$lines[] = [
'descripcion' => $item->get_name(),
'cantidad' => (float) $item->get_quantity(),
'precioUnitario' => $subtotal / max(1, $item->get_quantity()),
'tipoIva' => $subtotal > 0 ? round($tax / $subtotal * 100) : 0,
];
}
$nif = $order->get_meta('_billing_nif'); // el meta de tu plugin de NIF
wp_remote_post('https://api.cofactu.com/api/webhooks/ecommerce-orders', [
'headers' => [
'Authorization' => 'Bearer ' . COFACTU_API_KEY, // define() en wp-config.php
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'platform' => 'woocommerce',
'externalOrderId' => (string) $order->get_id(),
'client' => $nif ? [
'nif' => $nif,
'nombre' => $order->get_formatted_billing_full_name(),
'email' => $order->get_billing_email(),
'direccion' => $order->get_billing_address_1(),
'codigoPostal' => $order->get_billing_postcode(),
'ciudad' => $order->get_billing_city(),
'pais' => $order->get_billing_country(),
] : null, // F2 simplificada
'lines' => $lines,
]),
'timeout' => 15,
]);
}); Sin código
Crea una API key en Cofactu (Configuración → API keys).
En Make, módulo «WooCommerce → Watch Orders» con estado processing o completed; en Zapier, «WooCommerce → Order Paid» (WooCommerce necesita el plugin de Zapier para exponer el trigger).
Módulo HTTP: POST a https://api.cofactu.com/api/webhooks/ecommerce-orders con Authorization: Bearer vf_live_….
Mapea id a externalOrderId, billing a client y line_items a lines (subtotal / quantity es el precio unitario sin IVA).
El JSON que espera Cofactu
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 y se ve cada pedido con su estado en AEAT.
{
"platform": "woocommerce",
"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
} Preguntas frecuentes
Todavía no. Es el primero del roadmap de integraciones, pero hoy se conecta con un mu-plugin de veinte líneas o con Make/Zapier, que hacen la misma llamada al webhook que hará el plugin.
No. Los plugins de «PDF Invoices» generan un documento, pero no un registro de facturación con huella encadenada, QR y envío a AEAT. Puedes seguir usándolos como albarán o justificante; la factura fiscal la emite Cofactu.
Con cualquier plugin de campos de NIF/CIF para WooCommerce (los hay gratuitos) que lo guarde como meta del pedido, y leyendo ese meta en el hook. Sin NIF, client: null emite una factura simplificada F2.
El webhook es idempotente por platform + externalOrderId: el mismo pedido nunca produce dos facturas. La segunda llamada devuelve la primera factura con su estado en AEAT.
Para el envío a AEAT sí: se carga una vez en Cofactu y el webhook lo usa en cada pedido. Sin certificado, las facturas se crean en borrador y las envías cuando lo tengas. 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.
Cuenta gratis, API key en un minuto y un pedido de prueba para ver la primera factura encadenada.
Usamos cookies propias, de Google (qué anuncios traen registros) y de PostHog (cómo se usa la web). Si las rechazas, la web funciona igual. Más información .
Empieza gratis o mira los planes. Tu primera factura VeriFactu en menos de 10 minutos.