Gå direkt till huvudinnehållet
En Fabrixa-webhook-payload på skärmen — signerad JSON-beställningshändelse, mot vävt textilmaterial
Utvecklare · Referens för webhooks

Varje event. Varje payload. Signerad.

Fabrixa skickar beställningshändelser till din endpoint i realtid. Din server tillhandahåller en offentlig POST-endpoint; vi skickar hela beställningsinnehållet med en HMAC-SHA256-signatur och händelseämnet i rubrikerna. Verifiera signaturen, returnera snabbt statuskoden 200 och bearbeta asynkront.

HMAC-SHA256 · order.created / order.updated · 10 försök vid leverans

Begäran-rubriker

Tre rubriker identifierar och verifierar begäran.

Varje POST-webhook innehåller samma tre rubriker. Använd x-webhook-topic för att vidarebefordra händelsen och x-webhook-signature för att kontrollera det innan du litar på innehållet.

content-type är alltid application/json. x-webhook-signature är Base64-kodningen av HMAC-SHA256 för det obearbetade innehållet. x-webhook-topic är evenemangets namn.

Inkommande rubriker
{
  "content-type":        "application/json",
  "x-webhook-topic":     "order.updated",
  "x-webhook-signature": "YmEwNjBhMGMy...MAxMw=="
}
Webhook-händelser

Två ämnen idag.

Varje webhook utlöses av en specifik x-webhook-topic värde. Båda innehåller hela orderobjektet, vilket innebär att en enda hanterare kan växla mellan ämnena.

order.created

En ny beställning har lagts.

Utlöses när en order skapas i Fabrixa – antingen via en API-förfrågan eller direkt i plattformen.

order.updated

En befintlig beställning ändras.

Utlöses när orderuppgifterna ändras – till exempel när orderstatusen eller leveransstatusen ändras framöver.

Status

Vad statusfälten kan visa.

Nyttolasten bär med sig ordern status samt en separat fulfillment_status. Utgå från dessa för att styra din egen orderstatus.

Orderstatus
  • Completed — levererad eller avhämtad och mottagandet bekräftat.
  • Canceled — betalningen avbröts; transaktionen genomfördes inte.
  • On hold — beställningen är tillfälligt spärrad.
  • Imported — beställningen har importerats till plattformen.
Leveransstatus
  • Unfulfilled — har ännu inte förberetts eller skickats.
  • Partially fulfilled — vissa artiklar har behandlats eller skickats, andra väntar på behandling.
  • Scheduled — planerade och schemalagda för bearbetning.
  • Rejected — begäran om uppfyllande avslogs.
  • Fulfilled — helt färdigbehandlade och levererade eller ställda till förfogande.
Payload

Hur kroppen ser ut.

Hela order.updated payloaden, precis som den beskrivs i API-referensdokumentet – beställningen, dess statusar och raderna med uppgifter om variant, produkt och källa.

POST-innehåll — order.updated
{
  "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" }
        }
      ]
    }
  ]
}
Kontrollera signaturen

Beräkna HMAC på nytt, jämför och lita sedan på meddelandetexten.

Beräkna HMAC-SHA256 på den obearbetade begäranens nyttolast med din hemliga nyckel, kod den med base64 och jämför med x-webhook-signature. Använd alltid en jämförelse med konstant tid (hash_equals) för att undvika tidsbaserade attacker.

Rå PHP
$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');
}
Laravel
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…
}
Leverans och svar

Omförsök och det svar vi förväntar oss.

Nya försök

Upp till 10 försök, därefter inaktiveras funktionen

Vilken som helst 2xx svar (t.ex. 200) räknas som en framgång, liksom ett 301 eller 302 omdirigering. Vilken som helst 4xx, 5xx eller om tidsgränsen överskrids utlöses ett nytt försök – upp till totalt 10 stycken. Efter det tionde misslyckandet inaktiveras webhooken.

Svar

Returnera 200 snabbt, bearbeta asynkront

Bekräfta med 200 OK så snabbt som möjligt och hantera sedan payloaden asynkront via ett bakgrundsjobb eller en kö. En långsam endpoint kan betraktas som ett fel även om den till slut lyckas.

Vanliga frågor

Webhooks, besvarat

Hur verifierar jag en Fabrixa-webhook-signatur?

Beräkna HMAC-SHA256 för den obearbetade begäran med hjälp av din hemliga nyckel, kodera resultatet med Base64 och jämför det med x-webhook-signature-huvudet med en jämförelse med konstant tid, till exempel hash_equals. Fabrixa tillhandahåller praktiska exempel i ren PHP och Laravel, och eventuella avvikelser bör avvisas innan nyttolasten bearbetas.

Vilka webhook-händelser skickar Fabrixa?

Fabrixa skickar två händelser, som identifieras via rubriken x-webhook-topic: order.created, som utlöses när en beställning läggs via API eller direkt i plattformen, och order.updated, som utlöses när beställningens status eller leveransstatus ändras. Båda innehåller hela orderobjektet, så en enda hanterare kan hantera ämnet.

Hur många gånger försöker Fabrixa på nytt om en webhook misslyckas?

Fabrixa gör upp till 10 nya försök att leverera en webhook när svaret inte är 2xx, 301 eller 302. Alla 4xx-, 5xx-koder eller tidsöverskridningar räknas som ett misslyckande och utlöser ett nytt försök; efter det tionde misslyckade försöket inaktiveras webhooken, så slutpunkten bör snabbt returnera 200 och bearbeta nyttolasten asynkront.

Vilka rubriker ingår i en Fabrixa-webhook-förfrågan?

Varje POST-begäran via webhook innehåller tre rubriker: content-type, alltid application/json; x-webhook-topic, som anger händelsens namn, till exempel order.updated; och x-webhook-signature, den base64-kodade HMAC-SHA256-signaturen för den obearbetade huvudtexten. Använd ämnet för att vidarebefordra händelsen och signaturen för att verifiera den innan du litar på nyttolasten.

Vilka orderstatusar visas i en Fabrixa-webhook-payload?

Payloaden innehåller ett statusfält med fyra värden – Slutförd, Avbruten, På väntelista och Importerad – samt ett separat fält, fulfillment_status, med fem värden: Ej utförd, Delvis utförd, Schemalagd, Avvisad och Utförd. En enda order.updated-händelse kan rapportera en förändring i något av dessa fält.

Skapa din hanterare

Konfigurera din webhook-ändpunkt.

Integrationsguiden beskriver hur du registrerar din slutpunkt och hanterar ordercykeln från början till slut. Den fullständiga API-referensen innehåller det fullständiga schemat för nyttolasten.