Hvert event. Hver payload. Signeret.
Fabrixa sender ordrebegivenheder til dit endpoint i realtid. Din server stiller ét offentligt POST-endpoint til rådighed; vi sender den fulde ordretekst med en HMAC-SHA256-signatur og begivenhedsemnet i headerne. Bekræft signaturen, returner hurtigt en 200-statuskode, og behandl asynkront.
Tre overskrifter identificerer og bekræfter anmodningen.
Hver POST-webhook indeholder de samme tre headere. Brug x-webhook-topic for at videresende begivenheden og x-webhook-signature for at verificere det, før du stoler på indholdet.
content-type er altid application/json. x-webhook-signature er base64-kodningen af HMAC-SHA256 for den rå brødtekst. x-webhook-topic er navnet på begivenheden.
{
"content-type": "application/json",
"x-webhook-topic": "order.updated",
"x-webhook-signature": "YmEwNjBhMGMy...MAxMw=="
}
Der er to emner i dag.
Hver webhook udløses af en bestemt x-webhook-topic værdi. Begge indeholder det fulde ordreobjekt, så en enkelt handler kan skifte mellem emnerne.
Der er afgivet en ny ordre.
Udløses, når der oprettes en ordre i Fabrixa — enten via en API-anmodning eller direkte i platformen.
En eksisterende ordre ændres.
Udløses, når ordreoplysningerne ændres — for eksempel når ordrestatus eller leveringsstatus ændres fremadrettet.
Hvad statusfelterne kan fortælle.
Nyttelasten bærer ordren status samt en separat fulfillment_status. Forgren din logik efter disse for at styre din egen ordrestatus.
- Completed — afsendt eller afhentet, og modtagelsen er bekræftet.
- Canceled — betalingen blev annulleret; transaktionen blev ikke gennemført.
- On hold — ordren er midlertidigt blokeret.
- Imported — ordren blev importeret til platformen.
- Unfulfilled — endnu ikke udarbejdet eller afsendt.
- Partially fulfilled — nogle varer er blevet behandlet eller afsendt, andre er endnu ikke behandlet.
- Scheduled — planlagt og sat på programmet til behandling.
- Rejected — anmodningen om opfyldelse blev afvist.
- Fulfilled — fuldt forarbejdet og leveret eller stillet til rådighed.
Hvordan kroppen ser ud.
Den fulde order.updated payload, præcis som beskrevet i API-referencedokumenterne — ordren, dens status og rækkerne med oplysninger om varianter, produkter og kilder.
{
"id": 23069,
"number": "1250211835",
"comments": null,
"is_archived": false,
"status": "imported",
"fulfillment_status": "unfulfilled",
"purchased_at": "2025-04-17T16:17:21.000000Z",
"created_at": "2025-04-17T16:17:23.000000Z",
"updated_at": "2025-04-18T07:43:52.000000Z",
"rows": [
{
"id": 27954,
"quantity": 1,
"client_barcode": "1250211835",
"fulfillment_status": "unfulfilled",
"variant": {
"id": 293457,
"name": "Sherpa fleece deken",
"subtitle": "100x150",
"SKU": "SFD787231",
"product": {
"id": 5319, "name": "Sherpa fleece deken", "subtitle": "Sherpa fleece deken"
}
},
"sources": [
{
"type": "print",
"url": "https://storage.googleapis.com/fabrixa-api/…/120002795400.pdf",
"properties": { "fill_style": "contain" }
}
]
}
]
}
Beregn HMAC’en på ny, sammenlign, og betragt derefter brødteksten som pålidelig.
Genberegn HMAC-SHA256 for den rå anmodningsdata med din hemmelige nøgle, kod den med base64, og sammenlign med x-webhook-signature. Brug altid en sammenligning med konstant tid (hash_equals) for at undgå timing-angreb.
$payload = file_get_contents('php://input'); $secret = 'your-secret-key'; $expected = base64_encode( hash_hmac('sha256', $payload, $secret, true) ); $received = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? ''; // constant-time compare if (!hash_equals($expected, $received)) { http_response_code(403); exit('Invalid signature'); }
public function handle(Request $request)
{
$secret = 'your-secret-key';
$payload = $request->getContent();
$expected = base64_encode(
hash_hmac('sha256', $payload, $secret, true)
);
$received = $request->header('x-webhook-signature');
if (!hash_equals($expected, $received)) {
abort(403, 'Invalid signature');
}
// Continue processing…
}
Gentagelser og det svar, vi forventer.
Op til 10 forsøg, derefter deaktiveret
Enhver 2xx et svar (f.eks. 200) betragtes som en succes, ligesom en 301 eller 302 omdirigering. Enhver 4xx, 5xx eller hvis der opstår en timeout, udløses et nyt forsøg — op til i alt 10 gange. Efter det tiende mislykkede forsøg deaktiveres webhooken.
Returner 200 hurtigt, behandl asynkront
Bekræft med 200 OK så hurtigt som muligt og behandl derefter payloaden asynkront via et baggrundsjob eller en kø. Et langsomt endpoint kan betragtes som en fejl, selvom det i sidste ende lykkes.
Webhooks, besvaret
Hvordan verificerer jeg en Fabrixa-webhook-signatur?
Beregn HMAC-SHA256 for den rå anmodningstekst på ny ved hjælp af din hemmelige nøgle, base64-kod resultatet, og sammenlign det med x-webhook-signature-headeren ved hjælp af en sammenligning med konstant tid, f.eks. hash_equals. Fabrixa giver konkrete eksempler i rå PHP og Laravel, og enhver uoverensstemmelse bør afvises, før payloadet behandles.
Hvilke webhook-begivenheder sender Fabrixa?
Fabrixa sender to begivenheder, der identificeres ved hjælp af x-webhook-topic-headeren: »order.created«, der udløses, når der afgives en ordre via API eller direkte på platformen, og »order.updated«, der udløses, når ordrestatus eller leveringsstatus ændres. Begge indeholder det fulde ordreobjekt, så én handler kan håndtere begge begivenheder.
Hvor mange gange forsøger Fabrixa at gentage et mislykket webhook?
Fabrixa forsøger at levere en webhook op til 10 gange, hvis svaret ikke er en 2xx-, 301- eller 302-kode. Enhver 4xx-, 5xx-kode eller timeout betragtes som en fejl og udløser et nyt forsøg; efter det tiende mislykkede forsøg deaktiveres webhooken, så endpointet bør hurtigt returnere en 200-kode og behandle payloadet asynkront.
Hvilke overskrifter indeholder en Fabrixa-webhook-anmodning?
Hver POST-webhook indeholder tre headere: content-type, som altid er application/json; x-webhook-topic, der angiver begivenhedens navn, f.eks. order.updated; og x-webhook-signature, som er den base64-kodede HMAC-SHA256-signatur for den rå brødtekst. Brug emnet til at videresende begivenheden og signaturen til at verificere den, før du stoler på nyttelasten.
Hvilke ordrestatus vises i en Fabrixa-webhook-payload?
Payload’et indeholder et statusfelt med fire værdier — Afsluttet, Annulleret, Sat på vent og Importeret — samt et separat felt ved navn `fulfillment_status` med fem værdier: Ikke udført, Delvist udført, Planlagt, Afvist og Udført. En enkelt `order.updated`-hændelse kan angive en ændring i et af disse felter.
Konfigurer dit webhook-endpoint.
Integrationsvejledningen gennemgår registreringen af dit endpoint og håndteringen af ordrens livscyklus fra start til slut. Den fulde API-reference indeholder det komplette skema for nyttedata.


