FEJLESZTŐK · Integration API dokumentáció

Fabrixa Integration API dokumentáció

6 perc olvasás Utolsó frissítés: 22-09-2026 21:12

Az Integration API segítségével Fabrixa-megrendeléseket hozhat létre és kezelhet, elindíthatja a Fabrixa Studiót, és webhookokon keresztül szinkronban maradhat a gyártási és teljesítési állapottal. Az API a REST konvencióit követi, és minden kérés- és válasz-törzsben JSON-t használ.

ALAP URL

https://api.fabrixa.com/v2/integration

Minden kérést erre az alap URL-re küldjön, amelyet az adott végpont útvonala követ. Az alap URL a Fabrixa API-val való munka kiindulópontja - erőforrások lekérdezéséhez, létrehozásához, frissítéséhez vagy törléséhez.

AZ ELSŐ KÉRÉS ELŐTT

Hitelesítés

Az Integration API eléréséhez hitelesítse a kéréseit egy alkalmazás hozzáférési tokennel és egy alkalmazáskulccsal is:

Authorization fejléc
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Alkalmazáskulcs fejléc
X-Application-Key: APPLICATION_KEY
Példa cURL parancsra
curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/ping' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Cserélje az APPLICATION_ACCESS_TOKEN értéket a saját hozzáférési tokenjére, az APPLICATION_KEY értéket pedig a saját alkalmazáskulcsára.

HOGYAN ÉPÜLNEK FEL A VÁLASZOK

Végpontok és kérések

Az Integration API végpontjai erőforrástípus szerint szerveződnek, és a REST architekturális stílust követik. Minden végpont egy erőforrást képvisel, és az erőforrásokon végzett műveletek a szokásos HTTP-metódusokkal történnek.

Az Integration API minden kérése és válasza JSON formátumú, így egységes és könnyen használható felületet nyújt az API-val való munkához.

Az egyes végpontok részletes leírását, kérés- és válaszpéldákkal együtt, a Swagger dokumentációnkban találja.

Válaszformátum

Minden végpont egységes formátumban ad vissza adatokat, a következő objektumokkal:

{
  "links": {
    "self": "https://api.fabrixa.com/v2/integration/products",
    "first_page": "https://api.fabrixa.com/v2/integration/products?page=1",
    "last_page": "https://api.fabrixa.com/v2/integration/products?page=2",
    "next_page": "https://api.fabrixa.com/v2/integration/products?page=2",
    "prev_page": null
  },
  "meta": {
    "total": 2,
    "current_page": 1,
    "per_page": 10
  },
  "data": [
    {
      "id": 1,
      "name": "Product 1",
      "description": "Description of Product 1"
    },
    {
      "id": 2,
      "name": "Product 2",
      "description": "Description of Product 2"
    }
  ]
}

A válaszobjektumok leírása

links

Lapozási hivatkozásokat tartalmaz az eredmények közötti navigáláshoz.

  • self — az aktuális oldal URL-je.
  • first_page — az eredmények első oldalának URL-je.
  • last_page — az eredmények utolsó oldalának URL-je.
  • next_page — a következő oldal URL-je. null, ha nincs következő oldal.
  • prev_page — az előző oldal URL-je. null, ha nincs előző oldal.

meta

A válaszra vonatkozó metaadatokat tartalmaz, például lapozási információt.

  • total — az összes oldalon elérhető tételek száma.
  • current_page — az eredmények aktuális oldalszáma.
  • per_page — az egy oldalon szereplő tételek száma.

data

A válasz fő tartalma. A data végpontonként változik - lehet egyetlen objektum, például egy termék, vagy objektumok tömbje, például terméklista.

AMIKOR VALAMI HIBÁRA FUT

Hibák és állapotkódok

Minden API-kérés HTTP állapotkódot ad vissza, amely tájékoztat a válaszról.

400 Bad Request

A szerver nem tudja feldolgozni a kérést validációs hibák miatt - hiányzó vagy érvénytelen paraméterek.

401 Unauthorized

A kliens nem adott meg érvényes hitelesítési adatokat. Akkor is ezt kapja, ha a hozzáférési tokent visszavonták.

403 Forbidden

A szerver elutasította a kérést az elégtelen hozzáférési jogok miatt, jellemzően hibás vagy hiányzó engedélyek okán.

404 Not Found

A kért erőforrás nem található a szerveren.

429 Too Many Requests

A kliens túllépte az adott időszakban engedélyezett kérések számát. Lásd a Kéréskorlátok részt.

5xx Errors

Belső szerverhiba történt. Kérjük, vegye fel a kapcsolatot a Fabrixa ügyfélszolgálatával, és adja meg a sikertelen kérés részleteit.

A hibaválasz törzse

Példa egy hibaválasz törzsére:

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/ping"
    },
    "meta": [],
    "errors": {
        "messages": [
            "Application Key is not specified."
        ]
    }
}

Az errors részletezi, mi hiúsult meg. A messages tömb a hibaleírásokat sorolja fel. Bad Request esetén megkapja azoknak a mezőknek a nevét, amelyek nem mentek át a validáción.

ISMERJE MEG A KÉRÉSKORLÁTOKAT

Kéréskorlátok

Az Integration API alkalmazásonként 30 kérés/perc korlátot támogat.

Ha túllépi ezt a korlátot, 429 Too Many Requests választ kap.

Az Integration API minden válasza tartalmazza az X-RateLimit-Remaining fejlécet, vagyis hogy a kliens még hány kérést tehet, és az X-RateLimit-Limit fejlécet, azaz a percenként engedélyezett teljes mennyiséget.

MEGRENDELÉSEK LÉTREHOZÁSA ÉS KÖVETÉSE

Megrendelések

Hozzon létre megrendeléseket a Fabrixában a saját webáruházából vagy platformjáról, csatolja a szükséges nyomtatási fájlokat, és kövesse minden tételt, ahogy végighalad a teljesítésen.

KÉSZÍTSE ELŐ A MEGRENDELÉS ADATAIT

Megrendelés létrehozása

Ha a Fabrixa Integration API-n keresztül szeretne megrendelést létrehozni, küldjön POST kérést a https://api.fabrixa.com/v2/integration/orders címre. A kérés törzsének tartalmaznia kell:

A kérés törzsének felépítése

  • number (opcionális) - a megrendelés száma. Ha nincs megadva, egyedi számot generálunk.
  • comments (opcionális) - a megrendeléshez tartozó további megjegyzések.
  • purchased_at - a megrendelés vásárlásának dátuma és időpontja YYYY-MM-DD HH:MM:SS formátumban.
  • client_ip (opcionális) - a vásárló IP-címe.
  • client_user_agent (opcionális) - a vásárló user-agent karakterlánca.
  • rows - a megrendelés tételeinek tömbje, mindegyik a következőket tartalmazza:
    • sku - a termékváltozat SKU-ja. A részleteket lásd a Swaggerben.
    • quantity - a megrendelt termékváltozat mennyisége.
    • client_barcode (opcionális) - egyedi kliensoldali azonosító megrendelési soronként, Code 128 formátumban.
    • cart_item_key (kötelező sources nélkül) - egyedi azonosító a Fabrixa Studiót beágyazó platformról, amely a mentett testreszabásokat a megrendeléshez kapcsolja.
    • sources (kötelező cart_item_key nélkül) - a termékhez tartozó forrásfájlok tömbje, mindegyik a következőket tartalmazza:
      • type - a termék típusa, alapértelmezés szerint használja a "file" értéket.
      • url - a forrásfájl URL-je.
  • customer - a vásárló adatai:
    • first_name, last_name, email, phone.
  • shipping_address - szállítási adatok:
    • address, address2 (opcionális), address3 (opcionális).
    • city, country_code (ISO 3166-2), country, postal_code, state (opcionális).
    • first_name, last_name, phone (opcionális), company (opcionális).
  • shipping_label (opcionális) - a címke adatai:
    • method_name - például "Post NL".
    • tracking_number, tracking_url, label_pdf_url.
    • date_created - YYYY-MM-DD HH:MM:SS formátumban.

Példakérés

{
  "number": "NL2024010201",
  "comments": "Customer agrees with a low resolution file.",
  "purchased_at": "2024-06-26 21:12:22",
  "client_ip": "127.0.0.1",
  "client_user_agent": "Mozilla",
  "rows": [
    {
      "variant_id": 2705,
      "quantity": 1,
      "client_barcode": "1234567890",
      "sources": [
        {
          "type": "file",
          "url": "https://samples-files.com/samples/sample.pdf"
        }
      ]
    }
  ],
  "customer": {
    "first_name": "John",
    "last_name": "Doe",
    "email": "3VJtP@example.com",
    "phone": "0647185332"
  },
  "shipping_address": {
    "address": "Pierre cuypershof",
    "address2": "17",
    "city": "Amsterdam",
    "country_code": "NL",
    "country": "Netherlands",
    "postal_code": "1012 AB",
    "state": "North Holland",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "0647185332"
  },
  "shipping_label": {
    "method_name": "Post NL",
    "tracking_number": "3SYZXG1585577",
    "tracking_url": "https://postnl.nl/tracktrace/3SYZXG1585577",
    "label_pdf_url": "https://api.fabrixa.com/storage/8966630826422f36d822f91680012141.pdf",
    "date_created": "2024-01-01 00:00:00"
  }
}
KÖVESSE A MEGRENDELÉS TÉTELEIT

Teljesítés nyomon követése

Egy adott megrendelés teljesítési állapotáért küldjön GET kérést a https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments címre. A válasz felsorolja a megrendeléshez tartozó teljesítéseket, köztük az egyes tételek állapotát, a termékadatokat és a gyártási lépések előrehaladását.

Példaválasz

{
    "data": [
        {
            "id": 1499,
            "barcode": "1200004169200",
            "status": "unfulfilled",
            "created_at": "2024-08-19T12:38:59.000000Z",
            "updated_at": "2024-08-19T12:39:00.000000Z",
            "variant": {
                "id": 32327,
                "name": "Test iAPI blanket product",
                "subtitle": "100 x 150 cm",
                "SKU": "COF099191"
            },
            "product": {
                "id": 1306,
                "name": "Test iAPI blanket product",
                "subtitle": "Test iAPI blanket product"
            },
            "production_steps": [
                {
                    "id": 5,
                    "name": "Print duvet",
                    "description": "Printing the duvet according to the specified design and dimensions.",
                    "status": {
                        "value": "pending",
                        "notes": null,
                        "updated_at": null
                    }
                },
                {
                    "id": 6,
                    "name": "Print pillow",
                    "description": "Printing the pillow cover with the assigned design.",
                    "status": {
                        "value": "pending",
                        "notes": null,
                        "updated_at": null
                    }
                }
            ]
        }
    ]
}

A válasz teljesítések listáját tartalmazza, amelyek mindegyike megadja:

  • id - a teljesítés egyedi azonosítója.
  • barcode - vonalkód a belső követéshez és azonosításhoz; a termékre is nyomtatható.
  • status - az aktuális teljesítési állapot: unfulfilled vagy fulfilled.
  • created_at és updated_at - a teljesítés létrehozásának és utolsó frissítésének időpontja.
  • variant - részletes információ a termékváltozatról: név, alcím, SKU.
  • product - termékadatok: név, alcím.
  • production_steps - a gyártási lépések tömbje. A lépések listája a terméktípustól függ. Minden lépéshez:
    • id - a gyártási lépés egyedi azonosítója.
    • name - például "Paplanhuzat nyomtatása".
    • description - mit foglal magában a gyártási lépés.
    • status - az aktuális állapot:
      • pending - még nem indult el.
      • in progress - éppen folyamatban van.
      • rejected - a lépésnél hiba merült fel, és nem fejeződött be sikeresen.
      • done - a lépés befejeződött.
    • notes - a lépéshez tartozó további megjegyzések.
    • updated_at - mikor frissült utoljára a lépés állapota.

Minden teljesítési rekord a megrendelés egy adott termékéhez vagy termékváltozatához tartozik, és a megrendelésben szereplő minden példánynak külön teljesítési rekordja van - minden tételt egyedileg követünk a gyártás során.

Ha egy megrendeléshez nem érkezik vissza teljesítés, a megrendelés még nem került feldolgozási szakaszba.

HOGYAN ADJA MEG A NYOMTATÁSI FÁJLOKAT

Forrásfájlok követelményei

Ha forrásfájlokat csatol a megrendeléshez, ügyeljen rá, hogy megfeleljenek a következő követelményeknek:

type

Forrásként PDF-fájlt kell megadnia. Ha a dizájn több termékrétegből áll, minden réteget külön oldalként helyezzen el ugyanabban a PDF-ben. A feldolgozás során minden oldal önálló rétegként kezelendő, így a többrétegű dizájnt egyetlen forrásfájlként adhatja be. Lásd a PDF-követelményeket és az oldalsorrendet.

A source objektumban a type értékének "file"-nak kell lennie.

"sources": [
    {
        "type": "file",
        "url": "https://samples-files.com/samples/source.pdf"
    }
]

További részletekért lásd a Swagger dokumentációt.

url

Az url mezőnek közvetlen hivatkozást kell tartalmaznia a forrásfájlra. Győződjön meg róla, hogy az URL elérhető, és a fájl hitelesítés nélkül letölthető. A hivatkozásnak a teljes gyártási folyamat alatt elérhetőnek kell maradnia.

Fájlformátum

A fájlokat PDF formátumban adja meg. Ügyeljen arra, hogy a képek jó minőségűek és nyomtatásra alkalmasak legyenek.

Képméretek

A maximális méret mindkét irányban 15 000 pixel. Az ezt a korlátot meghaladó képeket átméretezhetjük vagy elutasíthatjuk. A kép felbontása illeszkedjen a termék méreteihez, különben a képeket átméretezhetjük vagy levághatjuk, hogy beférjenek.

Felbontás

Nincs konkrét felbontási követelmény - csak ügyeljen rá, hogy a képminőség nyomtatásra elegendő legyen.

Színtér

A képek RGB színtérben legyenek a pontos színvisszaadás érdekében. A többi színteret a feldolgozás során átalakítjuk, ami hibás színeket eredményezhet.

Fájlméret

Egyik forrásfájl sem lehet nagyobb 50 MB-nál. A nagyobb fájlokat elutasíthatjuk, vagy késleltethetik a feldolgozást.

PDF-követelmények és oldalsorrend

A PDF-ben az oldalak sorrendje fontos. Az oldalakat pozíció szerint feleltetjük meg a termékrétegeknek, és az elvárt oldalsorrend a terméktípustól függ. Ügyeljen rá, hogy a PDF oldalai a beadott termékhez tartozó helyes rétegsorrendet kövessék.

TermékPDF oldalsorrend
Duvet Cover
  1. Duvet cover
  2. Pillow front
  3. Pillow back
Curtains
  1. Left curtain
  2. Right curtain
T-shirt
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Tanktop
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Sweater
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Collar
  8. Waistband
Hoodie
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Hood inside left
  8. Hood inside right
  9. Hood outside left
  10. Hood outside right
  11. Waistband
  12. Pocket lower left
  13. Pocket lower right
  14. Pocket upper right
  15. Pocket upper left
Sweatpants
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Left cuff
  6. Right cuff
  7. Waistband
  8. Right pocket
  9. Left pocket
  10. Back pocket
  11. Back pocket interfacing
Sweatshorts
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Waistband
  6. Right pocket
  7. Left pocket

Fontos: minden PDF-oldalnak meg kell felelnie a saját termékrétegéhez tartozó méreteknek, és helyes tájolásúnak kell lennie. Úgy helyezze el a grafikát, hogy a dizájn teteje az oldal tetejéhez illeszkedjen. A hibás oldalméret vagy tájolás méretezési, elforgatási vagy illesztési problémákat okozhat a gyártásban.

TERMÉK TESTRESZABÁSA

Fabrixa Studio

A Fabrixa Studio olyan eszköz, amellyel a felhasználók valós időben, gördülékenyen szabhatják testre és személyesíthetik a termékeket egy intuitív felületen, ahol saját dizájnt hozhatnak létre vagy tölthetnek fel.

A Fabrixa Studio ideális az egyedi termékeket kínáló vállalkozásoknak - a vásárlók már a megrendelés véglegesítése előtt láthatják a dizájnjukat.

ADJA HOZZÁ A STUDIÓT AZ ÜZLETÉHEZ

A Fabrixa Studio beágyazása

A Fabrixa Studio iframe segítségével beágyazható a webhelyére. Így a vásárlói a fizetési folyamat során közvetlenül az Ön oldalán személyesíthetik a termékeket.

Példa iframe a Fabrixa Studio beágyazásához:

<iframe id="fabrixa-studio"
    src="https://studio.fabrixa.com?application_key={application_key}&sku={product_sku}&cart_item_key={cart_item_key}"
    name="FabrixaStudio"
    scrolling="no"
    frameborder="1"
    width="100%"
    height="100%"
    allowfullscreen="">
</iframe>

Cserélje a product_sku, cart_item_key és application_key értékeket a saját dinamikus értékeire.

Megrendelés létrehozása cart_item_key értékkel

{
  "number": "NL2024010201",
  "purchased_at": "2024-06-26 21:12:22",
  "client_ip": "127.0.0.1",
  "client_user_agent": "Mozilla",
  "rows": [
    {
      "sku": "SB796162",
      "quantity": 1,
      "cart_item_key": "0cb76770-de2d-4524-aa48-47b6e5f0d8a5"
    }
  ],
  "customer": {
    "...": "..."
  },
  "shipping_address": {
    "...": "..."
  },
  "shipping_label": {
    "...": "..."
  }
}
FIGYELJE A VÁSÁRLÓI MŰVELETEKET

Studio-események kezelése

Amikor az iframe-en belül a Kosárba gombra kattintanak, a következő utasítás fut le:

window.parent.postMessage('customizationFinished', '*');

Hasonlóképpen, amikor a Vissza gombra kattintanak:

window.parent.postMessage('closeButtonClicked', '*');

A postMessage metódus teszi lehetővé az iframe és a szülőablak közötti, eltérő eredetű kommunikációt, így az értesítheti a szülőablakot bizonyos felhasználói műveletekről.

A postMessage első paramétere a küldeni kívánt adat. A 'customizationFinished' szöveg azt jelzi, hogy a felhasználó véglegesítette a testreszabást, és a kosárba teszi a terméket. A 'closeButtonClicked' azt jelzi, hogy a felhasználó a visszalépést választotta.

A szülőablakban a message eseményfigyelővel hallgassa ezeket az üzeneteket:

window.addEventListener('message', function(event) {
    if (event.origin === 'https://studio.fabrixa.com') {
        if (event.data === 'customizationFinished') {
            // Handle the Add to Cart event
            console.log('Customization finished and item can be added to cart.');
        } else if (event.data === 'closeButtonClicked') {
            // Handle the Back button event
            console.log('Back button clicked.');
        }
    }
});

Mindig ellenőrizze a bejövő üzenetek origin értékét, hogy megbízható forrásból származnak-e. A kapott üzenettől függően hajtsa végre a szükséges műveleteket - a felület frissítését, a kosár feldolgozását és így tovább. Az origin validálása biztonsági szempontból létfontosságú - megakadályozza, hogy illetéktelen szkriptek kommunikáljanak az alkalmazásával.

JELENÍTSE MEG AZ ELKÉSZÜLT DIZÁJNT

Testreszabás előnézete

A testreszabás befejezése után az alábbi előnézeti URL-lel jelenítse meg a végleges dizájnt. Ez az URL a testreszabott termék képét adja vissza, amely src értékként használható egy <img> elemben. Ideális a testreszabott termék megjelenítéséhez a kosárban, a megrendelés összegzésében vagy bárhol az üzlete felületén.

https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}

Cserélje a {CART_ITEM_KEY} értéket a tényleges kosártétel-kulcsra, a {APPLICATION_KEY} értéket pedig az érvényes alkalmazáskulcsára.

Példa a használatra képelemben:

<img
    src="https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}"
    alt="Customized Product Preview"
    style="max-width: 100%; height: auto;" />
PRÓBÁLJA KI SAJÁT ÉRTÉKEKKEL

Élő bemutató

A testreszabás előnézete itt jelenik meg, miután a dizájn elkészült.

Customization preview
FOGADJON ESEMÉNYFRISSÍTÉSEKET

Webhookok

A Fabrixa webhookokkal értesíti a rendszerét a valós időben történő eseményekről - megrendelések frissítéséről vagy létrehozásáról. Amikor egy esemény bekövetkezik, a Fabrixa webhookot küld a szerverére a vonatkozó információkkal. A szerverének nyilvános POST végpontot kell biztosítania a bejövő webhookok kezeléséhez.

TEKINTSE ÁT A BEJÖVŐ FEJLÉCEKET

A webhook kérés fejlécei

A webhook kérés a következő fejléceket tartalmazza, amelyek segítenek a bejövő kérés azonosításában és ellenőrzésében:

{
  "content-type": "application/json",
  "x-webhook-signature": "YmEwNjBhMGMyMzE3ZWQ5NGQ5NDYwOGVhNzNhMjQ4M2MyODZkZmI3NTQ1YzYxYjdkMzNhZjgzYzBmMTkxYTAxMw==",
  "x-webhook-topic": "order.updated"
}
A fejlécek részletei
VÁLASSZA KI AZ ESEMÉNYTÉMÁKAT

Webhook események

A Fabrixa webhookjai értesítik a rendszerét a megrendelés állapotában vagy tevékenységében bekövetkező változásokról. Minden webhookot egy adott x-webhook-topic érték indít el. A jelenleg támogatott témák:

TémaLeírás
order.created Akkor indul, amikor új megrendelés kerül a Fabrixába, akár API-kérésen keresztül, akár közvetlenül a platformon.
order.updated Akkor indul, amikor a megrendelés adatai, például a megrendelés vagy a teljesítés állapota frissül.

Megrendelési állapotok

Teljesítési állapotok

VIZSGÁLJA MEG AZ ESEMÉNY PAYLOADJÁT

Webhook payload példa

Példa a webhookkal küldött payloadra. Ez a payload egy megrendelés frissítését jelenti:

{
  "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/storage/99b10aaa-df4d-47e4-9bc9-b1d6a785df4c/orders/merchandise-sources/120002795400.pdf",
          "properties": {
            "fill_style": "contain"
          }
        }
      ]
    }
  ]
}
ELLENŐRIZZE A WEBHOOK FORRÁSÁT

Webhook aláírások ellenőrzése

Ahhoz, hogy megbizonyosodjon róla, hogy a webhook kérés eredeti és nem módosították, ellenőrizze az x-webhook-signature fejlécet. Ehhez a kérés nyers payloadja és a titkos kulcsa alapján újra ki kell számolnia a HMAC-SHA256 aláírást, majd össze kell hasonlítania a kapott aláírással.

Példa tiszta PHP-ban

$payload = file_get_contents('php://input');
$yourSecret = 'your-secret-key';
$expectedSignature = base64_encode(hash_hmac('sha256', $payload, $yourSecret, true));
$receivedSignature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

if (!hash_equals($expectedSignature, $receivedSignature)) {
    http_response_code(403);
    exit('Invalid signature');
}

Példa Laravelben

public function handle(Request $request)
{
    $yourSecret = 'your-secret-key';
    $payload = $request->getContent();
    $expectedSignature = base64_encode(hash_hmac('sha256', $payload, $yourSecret, true));
    $receivedSignature = $request->header('x-webhook-signature');

    if (!hash_equals($expectedSignature, $receivedSignature)) {
        abort(403, 'Invalid signature');
    }

    // Continue processing...
}

Cserélje a $yourSecret értéket a megosztott titkos kulcsára. Az aláírások összehasonlításához mindig a hash_equals függvényt használja, hogy csökkentse az időzítéses támadások esélyét.

MI TÖRTÉNIK, HA A KÜLDÉS MEGHIÚSUL?

Webhook újrapróbálkozások

A webhookok alapértelmezés szerint 10 sikertelen küldési kísérlet után letiltásra kerülnek. Ha a végpontja sikertelen állapotot ad vissza, például 404 vagy bármilyen 5xx hibát, a webhook összesen 10 alkalommal próbálkozik újra. Ha továbbra is 2xx vagy 3xx körön kívüli válaszkódot ad vissza, a webhook deaktiválódik. Sikeresnek számítanak:

ADJON VILÁGOS VÁLASZT

Webhook válasz

Erősen javasoljuk, hogy a végpontja mielőbb 200 OK állapotkódot adjon vissza, visszaigazolva a webhook sikeres fogadását. Bár minden 2xx vagy 3xx válasz sikeresnek számít, a 200 a leggyakoribb és legmegbízhatóbb.

A küldési időtúllépések és újrapróbálkozások elkerüléséhez azonnal adjon vissza 200 OK választ, a webhook payloadját pedig aszinkron módon dolgozza fel, például háttérfeladattal vagy várólistával. Ha a végpontja túl sokáig válaszol, a kísérlet sikertelennek minősülhet, még akkor is, ha a válasz végül sikeres.

A 4xx vagy 5xx tartományba eső állapotkóddal érkező válaszok, valamint az időtúllépések az újrapróbálkozási mechanizmus szerint újabb kísérleteket indítanak.