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 at kontrollere det, før du stoler på organet.
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 rummer både en ordre status og en fulfillment_status. Aktiver 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 leverandører.
{
"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
A 2xx (f.eks. 200) eller en 301 / 302 regnes som en succes. 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 derefter behandle nyttedataene asynkront via et baggrundsjob eller en kø. Et langsomt endpoint kan betragtes som en fejl, selvom det i sidste ende lykkes.
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.


