Salta al contingut
MCPFactura des de la teva IA
Factuarea

Webhooks

Cada canvi arriba al teu sistema. Signat i sense duplicats.

Factuarea avisa el teu servidor quan una factura canvia, es cobra o falla. Si no contestes, ho torna a provar automàticament.

  • Signatura HMAC-SHA256
  • Vuit intents durant més de 4 dies
  • Reenviament de lliuraments

Integracions i formats compatibles

  • Stripe
  • WhatsAppWhatsApp
  • Facturae
invoice.paid
FactuareaFactuarea

El teu servidor

POST /webhook

200 OK

L'esdeveniment surt signat. Si el lliurament es repeteix, conserva el mateix identificador perquè només el processis una vegada.

  • Signat

    HMAC-SHA256

  • Deduplicació

    Event-Id estable

  • 8 intents

    backoff + jitter

Verificar la signatura

Verificació HMAC-SHA256 en quatre passos

La capçalera Factuarea-Signature porta l'instant del lliurament i l'HMAC-SHA256 de t.cos calculat amb el teu secret. Verificar-la és fàcil; verificar-la malament, encara més.

  1. 1

    Signa sobre el cos cru

    L'HMAC es calcula sobre els bytes que han arribat, no sobre el JSON que el teu framework ja ha analitzat i ha tornat a serialitzar.

  2. 2

    Compara en temps constant

    timingSafeEqual, hash_equals o el que porti el teu llenguatge per comparar sense filtrar per on falla.

  3. 3

    Mira el rellotge

    La capçalera porta t amb l'instant UNIX del lliurament. Rebutja si han passat més de 300 segons.

  4. 4

    Accepta qualsevol dels v1

    Durant les 24 hores següents a una rotació la capçalera porta dues signatures. N'hi ha prou que en quadri una.

Node · el verificador sencer

import { createHmac, timingSafeEqual } from "node:crypto"; // `cuerpo` son los BYTES que llegaron, sin parsear ni volver a serializar.export function firmaValida(cuerpo, cabecera, secreto) {  const partes = cabecera.split(",").map((p) => p.split("="));  const t = Number(partes.find(([clave]) => clave === "t")?.[1]);  const firmas = partes.filter(([clave]) => clave === "v1").map(([, v]) => v);   // Ventana de 5 minutos: una entrega capturada no vale para mañana.  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;   const esperada = createHmac("sha256", secreto)    .update(`${t}.${cuerpo}`)    .digest("hex");   // Durante una rotación llegan dos v1. Basta con que cuadre uno.  return firmas.some(    (firma) =>      firma.length === esperada.length &&      timingSafeEqual(Buffer.from(firma), Buffer.from(esperada))  );}

Quan el teu servidor no contesta

Si el teu servidor cau, tornem a trucar

Cada esdeveniment arriba signat i conserva el mateix identificador. Així el pots reintentar sense processar-lo dues vegades.

  • Qualsevol resposta 2xxLliurament tancat. Es guarden el codi i el temps que has trigat, i aquí s'acaba.
  • 408, 425 i 429Són els únics 4xx transitoris i sí que es reintenten. La resta de 4xx es marca com a error permanent perquè corregeixis la petició i la reenviïs després.
  • 5xx, timeout o silenciA la cua. Vuit intents en total, amb esperes que creixen: el primer reintent al minut, l'últim tres dies després.
Factuarea
El teu servidor200 OK

Signat

HMAC-SHA256

Deduplicació

Event-Id estable

8 intents

backoff + jitter

invoice.emittedinvoice.cancelledverifactu.status.updated

Rotar el secret

Rotació del secret amb 24 hores de transició

El secret en clar s'ensenya un sol cop, en crear l'endpoint i en rotar-lo. Després es desa xifrat per signar lliuraments i també com a hash per verificar-lo. La rotació no talla res si respectes l'ordre.

AbansRotes · 24 h de gràciaDesprés

Secret anterior

Secret nou

Durant la finestra cada lliurament surt signat dues vegades: la capçalera porta t, el v1 del secret nou i el v1 de l'anterior. El teu verificador dona la signatura per bona si en quadra qualsevol dels dos.

L'ordre que no perd cap esdeveniment

  1. 1

    Fes que el teu servidor accepti els dos secrets alhora.

  2. 2

    Rota, i desa el nou: només s'ensenya un cop.

  3. 3

    Desplega el secret nou al teu servidor.

  4. 4

    Abans que passin 24 hores, retira el vell.

No es pot rotar dues vegades en cinc minuts

És una barana posada expressament. Dues rotacions seguides deixarien fora el secret que el teu servidor acaba d'aprendre, i llavors sí que cauen lliuraments.

Rotació i doble signatura, a la guia

Superfície publicada

Una integració que encaixa amb el teu stack

El contracte OpenAPI, els SDK i el servidor MCP parteixen de la mateixa API. Les xifres es revisen contra la superfície publicada perquè puguis avaluar l'abast i el manteniment abans d'integrar.

operacions API
413
recursos
37
eines MCP
391
pàgines de documentació
797

Tecnologies i clients compatibles

  • Logotip oficial de StripeStripe
  • Logotip oficial de TypeScriptTypeScript
  • Logotip oficial de PHPPHP
  • Logotip oficial de OpenAPIOpenAPI

Els logotips identifiquen tecnologies o clients compatibles; no impliquen una relació comercial ni un testimoni.

Abans de posar-ho en producció

Dubtes habituals sobre webhooks

Verifica la capçalera Factuarea-Signature amb HMAC-SHA256, el cos sense modificar i una tolerància de cinc minuts. Els SDK oficials inclouen el verificador per evitar diferències de serialització.

Agafa una clau de prova i envia un ping

El circuit sencer (crear l'endpoint, signar, fallar, reintentar, reenviar) es prova en sandbox sense tocar res real. La clau de prova se treu del tauler en un minut.