KEHITTÄJÄT · Integration API -viite

Fabrixa Integration API -viite

6 min lukuaika Viimeksi päivitetty:07-08-2026 20:55

Integration API auttaa sinua luomaan ja hallitsemaan Fabrixa-tilauksia, käynnistämään Fabrixa Studion ja pysymään synkronoituna tuotannon ja toimitusten tilan kanssa webhookien avulla. API noudattaa REST-käytäntöjä ja käyttää JSON:ia kaikissa pyyntö- ja vastausosissa.

PERUS-URL-OSOITE

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

Lähetä kaikki pyynnöt tähän perus-URL-osoitteeseen, jota seuraa tietty päätepistepolku. Perus-URL-osoite on perusta vuorovaikutukselle Fabrixa API:n kanssa - resurssien noutamiseen, luomiseen, päivittämiseen tai poistamiseen.

ENNEN ENSIMMÄISTÄ ​​PYYNTÖÄSI

Todennus

Päästäksesi integraatiosovellusliittymään, todenna pyyntösi käyttämällä sekä Application Access Token-tunnusta että Application Key:

Valtuutusotsikko
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Sovellusavaimen otsikko
X-Application-Key: APPLICATION_KEY
Esimerkki cURL-komento
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'

Korvaa APPLICATION_ACCESS_TOKEN todellisella käyttötunnuksellasi ja APPLICATION_KEY todellisella sovellusavaimellasi.

MITEN VASTAUKSET RAKENNEVAT

Päätepisteet ja pyynnöt

Integration API -päätepisteet on järjestetty resurssityypin mukaan ja noudattavat RESTful-arkkitehtuurityyliä. Jokainen päätepiste edustaa resurssia, ja näiden resurssien toiminnot suoritetaan tavallisilla HTTP-menetelmillä.

Kaikki Integration API -pyynnöt ja vastaukset ovat JSON-muodossa, mikä tarjoaa johdonmukaisen ja helppokäyttöisen käyttöliittymän vuorovaikutukseen API:n kanssa.

Katso täydelliset tiedot jokaisesta endpointista, mukaan lukien pyyntö- ja vastausesimerkit, Swagger-dokumentaatiosta.

Vastausmuoto

Kaikki päätepisteet palauttavat tiedot standardoidussa muodossa seuraavien objektien kanssa:

{
  "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"
    }
  ]
}

Vastausobjektien kuvaus

links

Sisältää sivutuslinkkejä tulosten selailuun.

  • self — nykyisen sivun URL-osoite.
  • first_page — ensimmäisen tulossivun URL-osoite.
  • last_page — viimeisen tulossivun URL-osoite.
  • next_page — seuraavan sivun URL-osoite. null, jos seuraavaa sivua ei ole.
  • prev_page — edellisen sivun URL-osoite. null jos edellistä sivua ei ole.

meta

Sisältää metatiedot vastauksesta, kuten sivutustiedot.

  • total — kaikkien sivujen käytettävissä olevien kohteiden kokonaismäärä.
  • current_page — tulosten nykyinen sivunumero.
  • per_page — kohteiden määrä sivulla.

data

Vastauksen pääsisältö. data vaihtelee päätepisteen mukaan - se voi olla yksittäinen objekti, esimerkiksi yksi tuote, tai joukko objekteja, esimerkiksi tuoteluettelo.

KUN JOTAIN MENEE PIELEEN

Virheet ja tilakoodit

Kaikki API-pyynnöt palauttavat HTTP-tilakoodit, jotka antavat käsityksen vastauksesta.

400 Bad Request

Palvelin ei voi käsitellä pyyntöä vahvistusvirheiden vuoksi – puuttuvat tai virheelliset parametrit.

401 Unauthorized

Asiakas ei ole antanut kelvollisia todennustunnuksia. Palautetaan myös, kun käyttöoikeustunnus on peruutettu.

403 Forbidden

Palvelin hylkäsi pyynnön riittämättömien käyttöoikeuksien vuoksi, mikä johtuu tyypillisesti virheellisistä tai puuttuvista käyttöoikeuksista.

404 Not Found

Pyydettyä resurssia ei löytynyt palvelimelta.

429 Too Many Requests

Asiakas on ylittänyt sallitun pyyntöjen määrän tietyllä aikavälillä. Katso Rate Limits.

5xx Errors

Tapahtui sisäinen palvelinvirhe. Ota yhteyttä Fabrixan tukeen ja kerro tiedot epäonnistuneesta pyynnöstä.

Error Response Body

Esimerkki virhevastauksen rungosta:

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

errors sisältää tietoja siitä, mikä epäonnistui. messages-taulukko sisältää virhekuvaukset. Jos pyyntö on huono, saat niiden kenttien nimet, joiden vahvistus epäonnistui.

TIEDÄ PYYNTÖSI RAJAT

Rate Limits

Integration API tukee enintään 30 pyyntöä sovellusta kohti minuutissa.

Jos ylität tämän rajan, saat 429 Too Many Requests-vastauksen.

Kaikki Integration API -vastaukset sisältävät X-RateLimit-Remaining-otsikon, kuinka monta pyyntöä asiakas voi vielä tehdä, ja X-RateLimit-Limit-otsikon, joka on sallittu kokonaismäärä minuutissa.

LUO JA SEURAA TILAUKSIA

Tilaukset

Luo tilauksia Fabrixassa omalta myymälältäsi tai alustaltasi, liitä tarvittavat tulostustiedostot ja seuraa jokaista tuotetta sen eteneessä.

VALMISTA TILAUSTIEDOT

Luo tilaus

Luo tilaus Fabrixa Integration API:n kautta lähettämällä POST-pyyntö osoitteeseen https://api.fabrixa.com/v2/integration/orders. Pyyntöelimen tulee sisältää:

Pyydä kehon rakennetta

  • number (valinnainen) - tilausnumero. Jos sitä ei anneta, luodaan yksilöllinen numero.
  • comments (valinnainen) - tilaukseen liittyvät lisäkommentit tai huomautukset.
  • purchased_at - tilauksen ostopäivä ja -aika muodossa YYYY-MM-DD HH:MM:SS.
  • client_ip (valinnainen) - asiakkaan IP-osoite.
  • client_user_agent (valinnainen) - asiakkaan user-agent-merkkijono.
  • rows - tilausrivien array, joista jokainen sisältää:
    • sku - tuotevariantin SKU. Katso lisätiedot Swaggerista.
    • quantity - tilatun tuotevariantin määrä.
    • client_barcode (valinnainen) - yksilöllinen asiakaspuolen tunniste per tilausrivi, muodossa Code 128.
    • cart_item_key (pakollinen ilman sources) - yksilöllinen tunniste alustasta, joka upottaa Fabrixa Studion; käytetään yhdistämään tallennetut mukautukset tilaukseen.
    • sources (pakollinen ilman cart_item_key) - tuotteeseen liittyvien lähdetiedostojen array, jokainen sisältää:
      • type - tuotetyyppi; käytä oletuksena "file".
      • url - lähdetiedoston URL.
  • customer - asiakkaan tiedot:
    • first_name, last_name, email, phone.
  • shipping_address - toimitustiedot:
    • address, address2 (valinnainen), address3 (valinnainen).
    • city, country_code (ISO 3166-2), country, postal_code, state (valinnainen).
    • first_name, last_name, phone (valinnainen), company (valinnainen).
  • shipping_label (valinnainen) - lähetystarran tiedot:
    • method_name - esim. "Post NL".
    • tracking_number, tracking_url, label_pdf_url.
    • date_created - muodossa YYYY-MM-DD HH:MM:SS.

Esimerkkipyyntö

{
  "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"
  }
}
SEURAA TILAUSTUOTTEITASI

Jäljen täyttyminen

Saat tietyn tilauksen toteutustilan lähettämällä GET-pyynnön numeroon https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. Vastauksessa on luettelo tilaukseen liittyvistä toimituksista, mukaan lukien kunkin tuotteen tila, tuotetiedot ja tuotantovaiheen edistyminen.

Esimerkkivastaus

{
    "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
                    }
                }
            ]
        }
    ]
}

Vastaus sisältää luettelon suorituksista, joista jokainen sisältää:

  • id - fulfilmentin yksilöllinen tunniste.
  • barcode - viivakoodi sisäiseen seurantaan ja tunnistamiseen; voidaan myös tulostaa tuotteeseen.
  • status - nykyinen fulfilment-tila: unfulfilled tai fulfilled.
  • created_at ja updated_at - luonti- ja viimeisimmän päivityksen aikaleimat.
  • variant - yksityiskohtaiset tiedot tuotevariantista: nimi, alaotsikko, SKU.
  • product - tuotetiedot: nimi, alaotsikko.
  • production_steps - tuotantovaiheiden array. Vaihelista riippuu tuotetyypistä. Jokaiselle vaiheelle:
    • id - tuotantovaiheen yksilöllinen tunniste.
    • name - esim. "Print duvet".
    • description - mitä tuotantovaihe sisältää.
    • status - nykyinen tila:
      • pending - ei vielä aloitettu.
      • in progress - parhaillaan käynnissä.
      • rejected - vaiheessa tapahtui ongelma eikä sitä suoritettu onnistuneesti.
      • done - vaihe on valmis.
    • notes - vaiheeseen liittyvät lisähuomautukset.
    • updated_at - viimeisin aika, jolloin vaiheen tila päivitettiin.

Jokainen toimitustietue vastaa tiettyä tuotetta tai tuoteversiota tilauksen sisällä, ja jokaisella tilauksen tuotteen kopiolla on oma toimitustietue – jokaista tuotetta seurataan yksitellen koko tuotannon ajan.

Jos tilaukselle ei palauteta toimituksia, tilaus ei ole vielä siirtynyt käsittelyvaiheeseen.

TULOSTUSTIEDOSTOJEN TOIMITTAMINEN

Lähdetiedostovaatimukset

Kun sisällytät lähdetiedostoja tilaukseesi, varmista, että ne täyttävät seuraavat vaatimukset:

type

Sinun on annettava lähteeksi PDF-tiedosto. Jos suunnittelussasi on useita tuotekerroksia, sisällytä jokainen kerros erillisenä sivuna samaan PDF-tiedostoon. Käsittelyn aikana jokaista sivua käsitellään erillisenä tasona, jolloin voit lähettää monikerroksisen suunnittelun yhtenä lähdetiedostona. Katso PDF-vaatimukset ja sivujärjestys.

Lähdeobjektin type on asetettava arvoon "file".

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

Lisätietoja on Swagger-dokumentaatiossa.

url

Kentässä url on oltava suora linkki lähdetiedostoon. Varmista, että URL-osoite on käytettävissä ja että tiedosto voidaan ladata ilman todennusta. Linkin on oltava käytettävissä koko tuotantoprosessin ajan.

Tiedostomuoto

Anna tiedostot PDF-muodossa. Varmista, että kuvat ovat korkealaatuisia ja tulostukseen sopivia.

Kuvan mitat

Maksimimitat ovat 15,000 pixels kummallakin puolella. Tämän rajan ylittävien kuvien kokoa voidaan muuttaa tai ne voidaan hylätä. Kuvan resoluution tulee vastata tuotteen mittoja; muuten kuvien kokoa voidaan muuttaa tai rajata sopivaksi.

Resoluutio

Ei erityisiä tarkkuusvaatimuksia - varmista vain, että kuvanlaatu on riittävä tulostukseen.

Väriavaruus

Kuvien tulee olla RGB väriavaruudessa, jotta värit esitetään tarkasti. Muut väriavaruudet muunnetaan käsittelyn aikana, mikä voi johtaa vääriin väreihin.

Tiedoston koko

Yksikään lähdetiedosto ei saa ylittää 50 MB. Suuremmat tiedostot voidaan hylätä tai aiheuttaa käsittelyviiveitä.

PDF-vaatimukset ja sivujärjestys

PDF:n sivujen järjestys on tärkeä. Sivut kohdistetaan tuotetasoihin sijainnin mukaan, ja odotettu sivujärjestys riippuu tuotetyypistä. Varmista, että PDF-tiedoston sivut noudattavat lähettämäsi tuotteen oikeaa kerrosjärjestystä.

TuotePDF-sivujen järjestys
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

Tärkeää: jokaisen PDF-sivun on vastattava tuotekerroksen vaadittuja mittoja ja oltava oikein suunnattu. Aseta taide niin, että kuvion yläreuna on kohdakkain sivun yläosan kanssa. Virheellinen sivun koko tai suunta voi aiheuttaa skaalaus-, kierto- tai kohdistusongelmia tuotannossa.

TUOTTEEN MUKAUTUS

Fabrixa Studio

Fabrixa Studio on työkalu, jonka avulla käyttäjät voivat räätälöidä ja personoida tuotteita saumattomasti reaaliajassa intuitiivisen käyttöliittymän avulla, jossa käyttäjät voivat luoda tai lähettää omia mallejaan.

Fabrixa Studio on ihanteellinen yrityksille, jotka tarjoavat räätälöityjä tuotteita - mahdollistaen asiakkaiden visualisoinnin suunnittelussa ennen tilausten viimeistelyä.

LISÄÄ STUDIO KAUPPAASI

Upota Fabrixa Studio

Voit upottaa Fabrixa Studion verkkosivustollesi käyttämällä iframe-komentoa. Näin asiakkaasi voivat muokata tuotteita suoraan sivustollasi kassalla.

Esimerkki iframe-kehyksestä Fabrixa Studion upottamista varten:

<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>

Korvaa product_sku-, cart_item_key- ja application_key-arvot dynaamisilla arvoillasi.

Pyydä luomaan tilaus cart_item_key

{
  "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": {
    "...": "..."
  }
}
KUULU ASIAKKAAN TOIMENPITEITÄ

Hallitse Studio-tapahtumia

Kun Lisää ostoskoriin -painiketta napsautetaan iframe-kehyksen sisällä, seuraava komento suoritetaan:

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

Vastaavasti, kun Takaisin-painiketta napsautetaan:

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

postMessage-menetelmä helpottaa lähteiden välistä viestintää iframe-kehyksen ja sen ylätason ikkunan välillä, jolloin se voi ilmoittaa ylätason käyttäjälle tietyistä käyttäjän toimista.

Ensimmäinen argumentti postMessage on tiedot, jotka haluat lähettää. Merkkijono 'customizationFinished' osoittaa, että käyttäjä on viimeistellyt mukauttamisen ja lisää tuotteen ostoskoriin. 'closeButtonClicked' osoittaa, että käyttäjä on päättänyt palata takaisin.

Kuuntele ylätason ikkunassa näitä viestejä käyttämällä message-tapahtuman kuuntelua:

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.');
        }
    }
});

Tarkista aina saapuvien viestien origin varmistaaksesi, että ne tulevat luotettavasta lähteestä. Riippuen vastaanotetusta viestistä, suorita tarvittavat toimenpiteet - päivitä käyttöliittymä, käsittele ostoskori jne. origin-tarkistus on erittäin tärkeää turvallisuuden kannalta - se estää luvattomia komentosarjoja vuorovaikutuksessa sovelluksesi kanssa.

NÄYTÄ VALMIS SUUNNITELMA

Mukauttamisen esikatselu

Kun mukauttaminen on valmis, näytä lopullinen malli käyttämällä alla olevaa esikatselu-URL-osoitetta. Tämä URL-osoite palauttaa kuvan mukautetusta tuotteesta, joka sopii src-arvoksi <img>-tunnisteessa. Ihanteellinen mukautetun tuotteen näyttämiseen ostoskorissasi, tilausyhteenvedossa tai missä tahansa myymäläsi käyttöliittymässä.

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

Korvaa {CART_ITEM_KEY} todellisella ostoskorin nimikeavaimella ja {APPLICATION_KEY} voimassa olevalla sovellusavaimellasi.

Esimerkki käytöstä kuvatunnisteessa:

<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;" />
KOKEILE SITÄ ARVOJEN KANSSA

Live-demo

Räätälöinnin esikatselu tulee näkyviin tähän, kun suunnittelu on valmis.

Customization preview
VASTAA TAPAHTUMAPÄIVITYKSIÄ

Webhooks

Fabrixa käyttää Webhookeja ilmoittamaan järjestelmällesi reaaliaikaisista tapahtumista – tilauspäivityksistä tai luomuksista. Kun tapahtuma tapahtuu, Fabrixa lähettää palvelimellesi webhookin, joka sisältää tarvittavat tiedot. Palvelimesi on esitettävä julkinen POST-päätepiste saapuvien webhookien käsittelemiseksi.

TARKASTA SAAPUT OTSIKKOJASI

Webhook-pyyntöotsikot

Webhook-pyyntö sisältää seuraavat otsikot, jotka auttavat sinua tunnistamaan ja vahvistamaan saapuvan pyynnön:

{
  "content-type": "application/json",
  "x-webhook-signature": "YmEwNjBhMGMyMzE3ZWQ5NGQ5NDYwOGVhNzNhMjQ4M2MyODZkZmI3NTQ1YzYxYjdkMzNhZjgzYzBmMTkxYTAxMw==",
  "x-webhook-topic": "order.updated"
}
Otsikkojen erittely
VALITSE TAPAHTUMAN AIHEET

Webhook-tapahtumat

Fabrixa webhookit ilmoittavat järjestelmällesi tilauksen tilan tai toiminnan muutoksista. Jokainen webhook käynnistyy tietyllä x-webhook-topic-arvolla. Tällä hetkellä tuetut aiheet:

AiheKuvaus
order.created Käynnistyy, kun uusi tilaus tehdään Fabrixaan joko API-pyynnön kautta tai suoraan alustalla.
order.updated Käynnistyy, kun tilauksen tiedot, kuten tilauksen tila tai toteutustila, päivitetään.

Tilauksen tilat

Toteutustilat

TARKASTA TAPAHTUMASSI HYÖDYKUORMA

Esimerkki Webhook-hyötykuormasta

Esimerkki webhookin mukana lähetetystä hyötykuormasta. Tämä hyötykuorma edustaa tilauspäivitystä:

{
  "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"
          }
        }
      ]
    }
  ]
}
VAHVISTA WEBHOOK-LÄHDESI

Tarkista Webhook-allekirjoitukset

Varmista x-webhook-signature-otsikko varmistaaksesi, että webhook-pyyntö on aito ja vahingoittumaton. Tämä tarkoittaa, että HMAC-SHA256-allekirjoitus lasketaan uudelleen raakapyynnön hyötykuorman ja salaisen avaimen avulla, minkä jälkeen sitä verrataan vastaanotettuun allekirjoitukseen.

Raaka PHP esimerkki

$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');
}

Laravel esimerkki

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...
}

Korvaa $yourSecret jaetulla salaisella avaimellasi. Käytä aina hash_equals allekirjoitusten vertaamiseen ajoitushyökkäysten vähentämiseksi.

MITÄ JOS TOIMITUS EIVÄLLÄ?

Webhook-uudelleenyritykset

Webhookit poistetaan oletusarvoisesti käytöstä 10 epäonnistuneen toimitusyrityksen jälkeen. Jos päätepisteesi palauttaa epäonnistuneen tilan, kuten 404 tai minkä tahansa 5xx-virheen, webhook yrittää uudelleen yhteensä 10 kertaa. Jos se jatkaa ei-2xx- tai ei-3xx-vastauskoodin palauttamista, se poistetaan käytöstä. Onnistuneita vastauksia ovat mm.

PALAUTTA SELKEÄ VASTAUS

Webhook-vastaus

Suosittelemme, että päätepiste palauttaa 200 OK-tilakoodin mahdollisimman nopeasti vahvistaakseen webhookin onnistuneen vastaanottamisen. Vaikka mitä tahansa 2xx tai 3xx vastausta pidetään onnistuneena, 200 on yleisimmin käytetty ja luotettavin.

Toimituksen aikakatkaisujen tai uudelleenyritysten välttämiseksi palauta 200 OK välittömästi ja käsittele webhook-hyötykuorman käsittelyä asynkronisesti, esimerkiksi taustatyön tai jonon kautta. Jos päätepisteesi vastaaminen kestää liian kauan, sitä voidaan pitää epäonnistuneena, vaikka vastaus olisi lopulta onnistunut.

Vastaukset, joiden tilakoodit ovat alueella 4xx tai 5xx, tai aikakatkaisut, käynnistävät uudelleenyritykset uudelleenyritysmekanismin mukaisesti.