Fabrixa Integration API dokumentáció
31 perc olvasás Utolsó frissítés: 06-11-2026 119 megtekintés
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.
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.
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.
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.
412 Precondition Failed
A kérés nem hajtható végre az erőforrás jelenlegi állapotában, például egy már nem lemondható megrendelésnél.
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.
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.
Sandbox mód
A sandbox mód lehetővé teszi, hogy az integrációt az elejétől a végéig kipróbálja, mielőtt bármelyik valódi rendelést legyártanák vagy elszámolnák. A teljes fiókjára érvényes: az összes értékesítési csatorna – köztük az Integration API és a csatlakoztatott Shopify- és WooCommerce-áruházak – rendelései nem kerülnek gyártásra, és nem terhelik az egyenlegét. A fiókja addig van sandbox módban, amíg az állapota aktiválásra vár.
Sandbox módban:
- csatlakoztathatja Shopify- vagy WooCommerce-áruházát, illetve létrehozhat Integration API-csatornát;
- termékeket adhat hozzá, és ellenőrizheti az árakat és a szállítási becsléseket;
- rendeléseket importálhat, létrehozhat, módosíthat és lemondhat;
- meggyőződhet róla, hogy ezek közül egyik rendelést sem gyártják le, és egyik sem terheli az egyenlegét;
- ellenőrizheti a webhookok kézbesítését és az aláírásokat.
A rendelések teszteléséhez adjon hozzá termékeket a Fabrixa katalógusból: nyisson meg egy terméket, kattintson az Értékesítés gombra, és válasszon változatokat és terveket. Ezután megjelennek a Termékeim alatt.
Ha át szeretné állítani a fiókját sandbox módra, nyissa meg a Platformot, lépjen a Beállítások → Cég → Sandbox mód oldalra, és kattintson a Sandbox módba kapcsolás gombra. Bekapcsolhatja új értékesítési csatorna – köztük Integration API-csatorna – hozzáadásakor is, vagy írhat a support@fabrixa.com címre, és mi átállítjuk a fiókját. A sandbox mód csak aktív fiókokhoz érhető el.
Ha készen áll, aktiválja a fiókját a Platformban a Beállítások → Cég → Sandbox mód oldalon. Írhat a support@fabrixa.com címre is, és mi aktiváljuk Ön helyett. A csatlakoztatott áruházak és az API hitelesítő adatok tovább működnek, így semmit nem kell újra beállítani.
Az aktiválás után az összes új rendelés gyártásba kerül, és terheli az egyenlegét. Az aktiválás előtt létrehozott rendelések tesztrendelések maradnak: soha nem kerülnek legyártásra és elszámolásra, az aktiválás után sem.
Termékek
A katalógus minden, amit a Fabrixa gyárt. Az Ön termékei azok a katalógustermékek, amelyeket a Fabrixa-fiókjához adott, saját nevekkel, leírásokkal, képekkel és SKU-kkal. Egy rendelési sor egy termékváltozatra hivatkozik - a termék egy méretére vagy kivitelére - annak sku vagy variant_id értékével: az Ön egyik termékének változatára, vagy egy közvetlenül rendelt katalógusváltozatra.
A katalógus böngészése
A Fabrixa által gyártott termékek listázásához küldjön GET kérést a https://api.fabrixa.com/v2/integration/catalog/products címre a hitelesítő adataival. Azokat az aktív termékeket sorolja fel, amelyeknek van olyan változata, amelyet egy nyomdai partner jelenleg gyárt, és csak ezeket a változatokat, mindegyiket a SKU-jával, eladási árával, méreteivel és opcióértékeivel.
Lekérdezési paraméterek
pageéslimit(legfeljebb 100) - lapokra bontják a listát. Nélkülük a teljes katalógus egyetlen válaszban érkezik.search- azok a termékek, amelyek neve tartalmazza a szöveget, vagy amelyek slugja vagy valamely változatánakSKU-ja azzal kezdődik.category_id- egy kategória termékei;parent_category_id- egy felső szintű kategória bármely alkategóriájának termékei. Lásd: Katalóguskategóriák.group_id- egy katalóguscsoport termékei.sort_by-name,created,updated,type,popularvagysold,sort_orderszerintascvagydescsorrendben. Alapértelmezés szerint a legújabb termékek vannak elöl.
Példakérés
curl -X 'GET' \
'https://api.fabrixa.com/v2/integration/catalog/products?category_id=19&limit=10' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
-H 'X-Application-Key: APPLICATION_KEY'
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/catalog/products",
"first_page": "https://api.fabrixa.com/v2/integration/catalog/products?page=1",
"last_page": "https://api.fabrixa.com/v2/integration/catalog/products?page=1",
"next_page": null,
"prev_page": null
},
"meta": {
"total": 1,
"current_page": 1,
"per_page": 10
},
"data": [
{
"id": 1305,
"name": "Duvet Cover",
"subtitle": "Duvet Cover with a pillow",
"description": "Soft personalized duvet cover.
",
"slug": "duvet-cover",
"code": "DUVET-001",
"HS_code": "63023100",
"created_at": "2024-08-16T09:32:07.000000Z",
"updated_at": "2024-08-16T09:38:50.000000Z",
"is_sellable": true,
"variants_min_selling_price": "29.95",
"variants_max_selling_price": "49.95",
"type": {
"id": 5,
"name": "Duvet cover"
},
"status": {
"id": 2,
"name": "Active"
},
"categories": [
{
"id": 19,
"name": "Duvet covers",
"description": "Personalized duvet covers",
"parent_category": {
"id": 8,
"name": "Bedroom",
"description": "Bedroom products"
}
}
],
"images": [
{
"id": 5566,
"url": "https://storage.googleapis.com/example/catalog/duvet-cover.jpg",
"is_main": true,
"created_at": "2024-08-16T09:32:07.000000Z",
"screen_type_size": "large",
"sort_number": 1
}
],
"variants": [
{
"id": 2705,
"name": "Duvet Cover",
"subtitle": "140x200",
"description": null,
"SKU": "COT864311",
"selling_price": "29.95",
"width": "140.00",
"height": "200.00",
"length": "2.00",
"weight": "1.20",
"created_at": "2024-08-06T11:23:44.000000Z",
"updated_at": "2024-08-16T09:36:37.000000Z",
"options": [
{
"id": 151,
"name": "Duvet Size",
"values": [
{
"id": 471,
"value": "140x200"
}
]
}
]
},
{
"id": 2708,
"name": "Duvet Cover",
"subtitle": "200x220",
"description": null,
"SKU": "COT864314",
"selling_price": "49.95",
"width": "200.00",
"height": "220.00",
"length": "2.00",
"weight": "1.80",
"created_at": "2024-08-06T11:23:44.000000Z",
"updated_at": "2024-08-16T09:37:11.000000Z",
"options": [
{
"id": 151,
"name": "Duvet Size",
"values": [
{
"id": 474,
"value": "200x220"
}
]
}
]
}
]
}
]
}
A válasz mezői
id,name,subtitle,description(HTML),slug,codeésHS_code, a vámtarifakód.is_sellable- a termék nyitott-e az értékesítésre. A lezárt termék továbbra is szerepel a listában, de a változataira leadott rendelést a rendszer elutasítja.variants_min_selling_priceésvariants_max_selling_price- a felsorolt változatok ártartománya.type- a terméktípus, amely meghatározza a nyomtatási rétegeket és a PDF oldalsorrendjét;status- a katalógusban mindigActive.categories- a kategóriák, amelyekben a termék szerepel, mindegyik a sajátparent_categoryértékével.images- a termékképekurl,is_main,screen_type_sizeéssort_numbermezőkkel.variants- a termék rendelhető kivitelei:id,name,subtitle,SKU,selling_price, awidth,height,lengthésweightméretek, valamint azoptions, a változatot meghatározó opcióértékek, például a mérete.
Katalóguskategóriák
A katalógus kategóriáinak listázásához küldjön GET kérést a https://api.fabrixa.com/v2/integration/catalog/categories címre a hitelesítő adataival. A válasz a felső szintű kategóriákat tartalmazza, mindegyiket az alkategóriáival a sub_categories mezőben és a benne lévő katalógustermékek számával a products_count mezőben. A katalógus böngészésekor adja át egy kategória id értékét category_id-ként, vagy egy felső szintű kategória id értékét parent_category_id-ként, hogy egyszerre megkapja az összes alkategóriájának termékeit.
Lekérdezési paraméterek
pageéslimit(legfeljebb 100) - lapokra bontják a listát. Nélkülük minden kategória visszaérkezik.search- azok a kategóriák, amelyek neve tartalmazza a szöveget.with_products_only-trueesetén kimaradnak azok a kategóriák, amelyekben sem közvetlenül, sem alkategóriában nincs katalógustermék.sort_by-category_namevagycategory_created,sort_orderszerintascvagydescsorrendben. Alapértelmezés szerint a kategóriák a katalógus sorrendjében érkeznek.
Példakérés
curl -X 'GET' \
'https://api.fabrixa.com/v2/integration/catalog/categories?with_products_only=true' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
-H 'X-Application-Key: APPLICATION_KEY'
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/catalog/categories"
},
"meta": {
"total": 1
},
"data": [
{
"id": 8,
"name": "Bedroom",
"description": "Bedroom products",
"sort_number": 1,
"slug": "bedroom",
"products_count": 12,
"sub_categories": [
{
"id": 19,
"name": "Duvet covers",
"description": "Personalized duvet covers",
"sort_number": 1,
"slug": "duvet-covers",
"products_count": 7,
"images": [],
"sub_categories": []
},
{
"id": 20,
"name": "Pillows",
"description": "Personalized pillows and pillowcases",
"sort_number": 2,
"slug": "pillows",
"products_count": 4,
"images": [],
"sub_categories": []
}
],
"parent_category": null,
"images": [
{
"id": 781,
"url": "https://storage.googleapis.com/example/catalog/bedroom.jpg",
"is_main": true,
"created_at": "2024-08-16T09:32:07.000000Z",
"screen_type_size": "large",
"sort_number": 1
}
]
}
]
}
Az Ön termékei
A fiókjában lévő termékek listázásához küldjön GET kérést a https://api.fabrixa.com/v2/integration/products címre a hitelesítő adataival. Az Ön termékei azok a katalógustermékek, amelyeket a Fabrixa-fiókjához adott: azokat a neveket, leírásokat és képeket viselik, amelyeket ott adott nekik, a változataik pedig az Ön által választott SKU értékeket. Csak az aktív termékek szerepelnek, laponként tíz, hacsak nem ad meg limit értéket.
Lekérdezési paraméterek
pageéslimit(legfeljebb 100) - a visszaadandó lap és annak mérete; alapértelmezés szerint az első lap tíz termékkel.search- azok a termékek, amelyek neve tartalmazza a szöveget, vagy amelyek slugja vagy valamely változatánakSKU-ja azzal kezdődik.
Példakérés
curl -X 'GET' \
'https://api.fabrixa.com/v2/integration/products?search=duvet' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
-H 'X-Application-Key: APPLICATION_KEY'
Példaválasz
{
"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=1",
"next_page": null,
"prev_page": null
},
"meta": {
"total": 1,
"current_page": 1,
"per_page": 10
},
"data": [
{
"id": 5321,
"name": "Dreamy Duvet Cover",
"subtitle": "Duvet cover with a matching pillowcase",
"description": "Our personalized duvet cover, printed on soft cotton sateen.
",
"slug": "dreamy-duvet-cover",
"width": "50.00",
"height": "50.00",
"length": "20.00",
"weight": "100.00",
"created_at": "2025-03-04T10:12:40.000000Z",
"updated_at": "2025-03-04T10:15:02.000000Z",
"type": {
"id": 5,
"name": "Duvet cover",
"description": "Duvet cover with pillow"
},
"available_options": [
{
"id": 151,
"name": "Duvet Size",
"values": [
{
"id": 471,
"value": "140x200"
},
{
"id": 474,
"value": "200x220"
}
]
}
],
"categories": [
{
"id": 912,
"name": "Bedding"
}
],
"collections": [
{
"id": 77,
"name": "Spring 2025"
}
],
"images": [
{
"id": 48120,
"is_main": true,
"image_size": "1200x1200",
"url": "https://storage.googleapis.com/example/shop/dreamy-duvet-cover.jpg",
"screen_type_size": "large",
"sort_number": 1
}
],
"variants": [
{
"id": 32323,
"name": "Dreamy Duvet Cover",
"subtitle": "140x200",
"description": null,
"SKU": "DDC-140200",
"created_at": "2025-03-04T10:12:41.000000Z",
"updated_at": "2025-03-04T10:12:41.000000Z",
"options": [
{
"id": 151,
"name": "Duvet Size",
"values": [
{
"id": 471,
"value": "140x200"
}
]
}
],
"images": [],
"available_source_types": ["duvet", "pillow", "pillow-back"],
"required_source_types": ["duvet", "pillow"]
},
{
"id": 32326,
"name": "Dreamy Duvet Cover",
"subtitle": "200x220",
"description": null,
"SKU": "DDC-200220",
"created_at": "2025-03-04T10:12:41.000000Z",
"updated_at": "2025-03-04T10:12:41.000000Z",
"options": [
{
"id": 151,
"name": "Duvet Size",
"values": [
{
"id": 474,
"value": "200x220"
}
]
}
],
"images": [],
"available_source_types": ["duvet", "pillow", "pillow-back"],
"required_source_types": ["duvet", "pillow"]
}
]
}
]
}
Egyetlen termék olvasásához küldjön GET kérést a https://api.fabrixa.com/v2/integration/products/{product_id} címre, ahol a {product_id} a termék id értéke. A válasz ugyanazokat a mezőket tartalmazza, mint a lista. Az a termék, amely nincs az Ön fiókjában, még ha katalógustermék is, 404 Not Found választ ad a Product not found. üzenettel.
A válasz mezői
id,name,subtitle,description(HTML),slug,width,height,lengthésweight.type- a terméktípus, amely meghatározza a nyomtatási rétegeket és a PDF oldalsorrendjét.available_options- a termék minden opciója az összes értékével, például minden méret, amelyben kapható; minden változat opciónként egy értéket vesz fel.categorieséscollections- a kategóriák és kollekciók, amelyekbe a fiókjában a terméket besorolta.images- a termékképekurl,is_main,image_size,screen_type_sizeéssort_numbermezőkkel.variants- a termék rendelhető kivitelei, lásd: Termékváltozatok:id,name,subtitle,SKU,options,images, valamint a nyomtatási rétegek azavailable_source_typesés arequired_source_typesmezőkben.
Termékváltozatok
A változat a termék egy rendelhető kivitele - egy méret, egy szín -, és erre hivatkozik a rendelési sor a sku vagy a variant_id értékkel. Az egyik termékének változatát a https://api.fabrixa.com/v2/integration/variants/{variant_id} címre küldött GET kéréssel olvashatja, ahol a {variant_id} a változat id értéke. Az Ön fiókjában nem szereplő termék változata 404 Not Found választ ad a Variant not found. üzenettel.
Példakérés
curl -X 'GET' \
'https://api.fabrixa.com/v2/integration/variants/32323' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
-H 'X-Application-Key: APPLICATION_KEY'
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/variants/32323"
},
"meta": [],
"data": {
"id": 32323,
"name": "Dreamy Duvet Cover",
"subtitle": "140x200",
"description": null,
"SKU": "DDC-140200",
"created_at": "2025-03-04T10:12:41.000000Z",
"updated_at": "2025-03-04T10:12:41.000000Z",
"width": "140.00",
"height": "200.00",
"length": "2.00",
"weight": "1.20",
"options": [
{
"id": 151,
"name": "Duvet Size",
"values": [
{
"id": 471,
"value": "140x200"
}
]
}
],
"images": [],
"product": {
"id": 5321,
"name": "Dreamy Duvet Cover",
"subtitle": "Duvet cover with a matching pillowcase",
"description": "Our personalized duvet cover, printed on soft cotton sateen.
",
"description2": null,
"slug": "dreamy-duvet-cover",
"created_at": "2025-03-04T10:12:40.000000Z",
"updated_at": "2025-03-04T10:15:02.000000Z"
},
"available_source_types": ["duvet", "pillow", "pillow-back"],
"required_source_types": ["duvet", "pillow"]
}
}
A válasz mezői
id,name,subtitle,description,SKU,width,height,length,weight,options,images, valamint aproduct, amelyhez a változat tartozik.available_source_types- a változat nyomtatási rétegei úgy elnevezve, ahogy a gyártási folyamata ismeri őket. A"file"mellett, amelyet minden változat elfogad PDF-hez, ezek azok az értékek, amelyeket egy forrásfájltypemezője felvehet; az egyetlen nyomtatási réteggel rendelkező termék a"print"értéket sorolja fel.required_source_types- a rétegek, amelyeket egy nyomtatási fájlnak le kell fednie. A"file"-ként küldött PDF az oldalaival fedi le őket, a terméktípus oldalsorrendjében. Egyébként a sornak mindegyikhez egy JPEG, PNG vagy TIFF fájlra van szüksége, a réteg nevéveltype-ként; az a sor, amelyből egy hiányzik,400 Bad Requestválasszal és a hiányzó rétegek neveivel kerül elutasításra.
Egy rendelési sor ehhez a változathoz, egy PDF-fel, amelynek oldalai a rétegei:
"rows": [
{
"sku": "DDC-140200",
"quantity": 1,
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/duvet-cover.pdf"
}
]
}
]
Mely változatok rendelhetők
- Egy rendelési sor az Ön fiókjában lévő termék változatára vagy közvetlenül egy katalógusváltozatra hivatkozhat, de soha nem egy másik ügyfél termékére. A változatot a
variant_id, vagy askualapján találja meg a rendszer, a kis- és nagybetűktől függetlenül. - A változatnak aktívnak kell lennie, a termékének pedig aktívnak és értékesítésre nyitottnak. Egy katalógustermék Ön általi másolatánál a katalógusterméknek is aktívnak, a katalógusváltozatnak pedig bekapcsoltnak kell lennie.
- Egyébként a rendelést a rendszer
400 Bad Requestválasszal és az adott sorra vonatkozó okkal utasítja el:The variant not found.,The product is not active.,The catalog product is not active.,The product is not open for sales.,The variant is not active.vagyThe catalog variant is not active.
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.
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őpontjaYYYY-MM-DD HH:MM:SSformá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 128formátumban.cart_item_key(kötelezősourcesné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_keynélkül) - a termékhez tartozó forrásfájlok tömbje, mindegyik a következőket tartalmazza:type- PDF esetén"file", JPEG, PNG vagy TIFF fájl esetén"print".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:SSformá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": "0612345678"
},
"shipping_address": {
"address": "Voorbeeldstraat",
"address2": "17",
"city": "Amsterdam",
"country_code": "NL",
"country": "Netherlands",
"postal_code": "1012 AB",
"state": "North Holland",
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678"
},
"shipping_label": {
"method_name": "Post NL",
"tracking_number": "3SABCD1234567",
"tracking_url": "https://postnl.nl/tracktrace/3SABCD1234567",
"label_pdf_url": "https://api.fabrixa.com/storage/8966630826422f36d822f91680012141.pdf",
"date_created": "2024-01-01 00:00:00"
}
}
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/orders"
},
"meta": [],
"data": {
"id": 20338,
"number": "NL2024010201",
"comments": "Customer agrees with a low resolution file.",
"is_archived": false,
"status": "imported",
"fulfillment_status": "unfulfilled",
"purchased_at": "2024-06-26T21:12:22.000000Z",
"created_at": "2024-06-26T21:15:03.000000Z",
"updated_at": "2024-06-26T21:15:04.000000Z",
"rows": [
{
"id": 41600,
"quantity": 1,
"client_barcode": "1234567890",
"fulfillment_status": "unfulfilled",
"variant": {
"id": 2705,
"name": "Duvet Cover",
"subtitle": "140x200",
"SKU": "COT864311",
"product": {
"id": 1305,
"name": "Duvet Cover",
"subtitle": "Duvet Cover with a pillow"
}
},
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/sample.pdf",
"properties": null
}
]
}
],
"shipments": [],
"customer": {
"email": "3VJtP@example.com",
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678"
},
"shipping_address": {
"address": "Voorbeeldstraat",
"address2": "17",
"address3": null,
"city": "Amsterdam",
"country": "Netherlands",
"country_code": "NL",
"company": null,
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678",
"state": "North Holland",
"postal_code": "1012 AB"
}
}
}
Megrendelés módosítása
Megrendelés módosításához küldjön PATCH kérést a https://api.fabrixa.com/v2/integration/orders/{order_id} címre, ahol a {order_id} a megrendelés Fabrixa-azonosítója. Csak az elküldött mezők változnak, a megrendelés állapota változatlan marad. A válasz a módosított megrendelést tartalmazza. Módosíthatja:
number,comments,purchased_at,client_ip,client_user_agent.customer-first_name,last_name,email,phone.shipping_address- ugyanazokat a mezőket, mint a megrendelés létrehozásakor.
Példakérés
{
"comments": "Deliver to the neighbours if nobody is home.",
"shipping_address": {
"address": "Voorbeeldstraat",
"address2": "19",
"city": "Amsterdam",
"country_code": "NL",
"country": "Netherlands",
"postal_code": "1012 AB",
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678"
}
}
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/orders/20338"
},
"meta": [],
"data": {
"id": 20338,
"number": "NL2024010201",
"comments": "Deliver to the neighbours if nobody is home.",
"is_archived": false,
"status": "imported",
"fulfillment_status": "unfulfilled",
"purchased_at": "2024-06-26T21:12:22.000000Z",
"created_at": "2024-06-26T21:15:03.000000Z",
"updated_at": "2024-06-27T09:41:18.000000Z",
"rows": [
{
"id": 41600,
"quantity": 1,
"client_barcode": "1234567890",
"fulfillment_status": "unfulfilled",
"variant": {
"id": 2705,
"name": "Duvet Cover",
"subtitle": "140x200",
"SKU": "COT864311",
"product": {
"id": 1305,
"name": "Duvet Cover",
"subtitle": "Duvet Cover with a pillow"
}
},
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/sample.pdf",
"properties": null
}
]
}
],
"shipments": [],
"customer": {
"email": "3VJtP@example.com",
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678"
},
"shipping_address": {
"address": "Voorbeeldstraat",
"address2": "19",
"address3": null,
"city": "Amsterdam",
"country": "Netherlands",
"country_code": "NL",
"company": null,
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678",
"state": "North Holland",
"postal_code": "1012 AB"
}
}
}
- A megrendelés tételei nem módosíthatók: a
rowsmezőt tartalmazó kérést az API400 Bad Requestválasszal elutasítja. A tételek módosításához mondja le a megrendelést, és hozzon létre egy újat. - A
on holdállapotú megrendelés nem módosítható; az API412 Precondition Failedválasszal felel.
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/orders/20338"
},
"meta": [],
"errors": {
"rows": [
"Order rows cannot be changed. Cancel the order and create a new one."
]
}
}
Megrendelés lemondása
Megrendelés lemondásához küldjön törzs nélküli POST kérést a https://api.fabrixa.com/v2/integration/orders/{order_id}/cancel címre, ahol a {order_id} a megrendelés Fabrixa-azonosítója (a megrendelés numerikus id mezője), nem pedig az Ön rendelésszáma. A válasz a megrendelést canceled állapottal tartalmazza, és egy order.updated webhook is kiküldésre kerül.
- A megrendelés addig mondható le, amíg az állapota
created,imported,acceptedvagyon hold, és afulfillment_statusértéke mégunfulfilled. Amintscheduledlesz, a gyártás megkezdődött, és a megrendelés már nem mondható le. - A lemondott megrendelés díjai visszakerülnek az Ön egyenlegére.
- Egy már lemondott megrendelés lemondása változatlanul adja vissza azt, így a kérés biztonságosan megismételhető.
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/orders/20338/cancel"
},
"meta": [],
"data": {
"id": 20338,
"number": "NL2024010201",
"comments": "Customer agrees with a low resolution file.",
"is_archived": false,
"status": "canceled",
"fulfillment_status": "unfulfilled",
"purchased_at": "2024-06-26T21:12:22.000000Z",
"created_at": "2024-06-26T21:15:03.000000Z",
"updated_at": "2024-06-27T10:02:45.000000Z",
"rows": [
{
"id": 41600,
"quantity": 1,
"client_barcode": "1234567890",
"fulfillment_status": "unfulfilled",
"variant": {
"id": 2705,
"name": "Duvet Cover",
"subtitle": "140x200",
"SKU": "COT864311",
"product": {
"id": 1305,
"name": "Duvet Cover",
"subtitle": "Duvet Cover with a pillow"
}
},
"sources": [
{
"type": "file",
"url": "https://samples-files.com/samples/sample.pdf",
"properties": null
}
]
}
],
"shipments": [],
"customer": {
"email": "3VJtP@example.com",
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678"
},
"shipping_address": {
"address": "Voorbeeldstraat",
"address2": "17",
"address3": null,
"city": "Amsterdam",
"country": "Netherlands",
"country_code": "NL",
"company": null,
"first_name": "John",
"last_name": "Doe",
"phone": "0612345678",
"state": "North Holland",
"postal_code": "1012 AB"
}
}
}
Ha a megrendelés nem mondható le, az API 412 Precondition Failed válasszal és az okot megadó üzenettel felel: a jelenlegi állapota nem teszi lehetővé (az állapot szerepel az üzenetben), vagy a gyártás már megkezdődött.
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/orders/20338/cancel"
},
"meta": [],
"errors": {
"messages": [
"This order cannot be canceled in its current status (ready for shipping)."
]
}
}
A megrendelés életciklusa
Egy megrendelést három állapot követ: a megrendelés status mezője, a gyártási állapota (fulfillment_status) és a shipments minden szállítmányának status mezője. Minden változást elküldünk az order.updated webhookban, és a GET /orders/{order_id} is visszaadja.
Megrendelési állapotok
A megrendelés status mezőjének értékei, abban a sorrendben, ahogyan bekövetkeznek:
imported- a megrendelés beérkezett az API-n keresztül. Minden megrendelés itt kezdődik.on hold- az egyenleg nem fedezi a megrendelés költségét. Feltöltés után a megrendelés visszakerülimportedállapotba, és folytatódik.accepted- a megrendelést elfogadtuk, és gyártásba kerül.completed(végleges) - minden tétel elkészült.canceled(végleges) - a megrendelést törölték. Ez addig lehetséges, amígimported,acceptedvagyon holdállapotban van, és a gyártás még nem kezdődött el.
Teljesítési állapotok
A megrendelés és minden megrendelési sor fulfillment_status mezőjének értékei, abban a sorrendben, ahogyan bekövetkeznek. Csak előre halad, soha nem vissza:
unfulfilled- a gyártás még nem kezdődött el.scheduled- a megrendelés be van ütemezve egy gyártási tételbe. Ettől kezdve már nem törölhető.processing- a gyártás folyamatban van.partially fulfilled- néhány tétel elkészült, a többi még gyártás alatt áll.fulfilled(végleges) - minden tétel elkészült. A megrendelésstatusmezője ekkorcompletedlesz.
Egy megrendelést egészében soha nem utasítanak el. Egy-egy tételt a gyártás közbeni minőségellenőrzés során elutasíthatnak. Ekkor újranyomtatják: visszakerül unfulfilled állapotba, és még egyszer végigmegy a gyártáson, a megrendelés pedig megtartja az állapotát, és folytatódik, amint a tétel elkészül.
Szállítási állapotok
A shipments minden szállítmánya status mezőjének értékei, abban a sorrendben, ahogyan bekövetkeznek:
pending- a szállítmány előkészítés alatt áll.registered- a címke elkészült a futárszolgálatnál.collected- a futárszolgálat átvette a csomagot.in transit- a csomag úton van.delivered(végleges) - a csomagot kézbesítették.
Kivételek:
failed- a futárszolgálat problémát jelzett.returned(végleges) - a csomagot visszaküldték nekünk.canceled(végleges) - a szállítmányt törölték.
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ésupdated_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.
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
A javasolt forrásformátum a PDF. Egy nyomtatási rétegű terméknél, például takarónál vagy törölközőnél JPEG, PNG vagy TIFF fájl is megfelel. Több rétegű terméknél PDF fájlt adjon meg, amelyben minden réteg külön oldal: feldolgozáskor minden oldalt külön rétegként kezelünk, így a többrétegű terv egyetlen forrásfájlként küldhető be. Lásd a PDF-követelményeket és az oldalsorrendet.
A type értékét a fájlformátum szerint adja meg. PDF esetén használja a "file" értéket: minden oldal a termék egy rétegére nyomtatódik, az adott terméknél megadott oldalsorrendben. Egy nyomtatási rétegű termékhez illő JPEG, PNG vagy TIFF fájl esetén használja a "print" értéket.
"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.
Hogyan töltjük le a fájlt
A fájlt kétszer töltjük le a szerveréről: egy Range: 0-0 kéréssel a megrendelés ellenőrzésekor, majd teljes egészében. Mindkét kérés a Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#sources; print file fetch) User-Agentet küldi; ha a webhelye szűri az automatizált forgalmat, engedélyezze. Az URL-nek HTTPS-t kell használnia a 443-as porton, és a fájlt közvetlenül, átirányítás nélkül, a valódi Content-Type fejléccel kell visszaadnia, pl. application/pdf. Minden kérés 60 másodperc után lejár.
Fájlformátum
Adjon meg PDF fájlt, egy rétegű terméknél pedig JPEG, PNG vagy TIFF fájlt, a valódi Content-Type fejlécével kiszolgálva. A PNG átlátszó területei fehéren nyomtatódnak. Ügyeljen rá, 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
Minden forrásfájl legfeljebb 200 MB lehet. A nagyobb fájlt elutasítjuk: a megrendelés létrehozásakor, ha a szervere Content-Length fejlécet küld, egyébként a fájl letöltésekor.
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ék | PDF oldalsorrend |
|---|---|
| Duvet Cover |
|
| Curtains |
|
| T-shirt |
|
| Tanktop |
|
| Sweater |
|
| Hoodie |
|
| Sweatpants |
|
| Sweatshorts |
|
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.
Szállítás
Tudja meg a megrendelés leadása előtt, mennyibe kerül a szállítása és mennyi ideig lesz úton, ugyanazon szabályok szerint, amelyekkel a Fabrixa magát a megrendelést árazza.
Szállítási országok
Ha meg szeretné tudni, mely országokba szállítható egy termékváltozat, küldjön GET kérést a https://api.fabrixa.com/v2/integration/shipping/countries címre a hitelesítő adataival. A lista név szerint rendezve tartalmazza azokat az országokat, amelyekbe a változatot gyártó telephelynek van szállítási díjszabása olyan szállítási csomagra, amelybe a változat becsomagolható. Ha egy ország nem szerepel a listán, oda nincs szállítási díjszabás a változathoz.
Lekérdezési paraméterek
variant_idvagysku- a változat, ugyanúgy megadva, mint egy rendelési sorban, akárcsak a becslésnél.
Példakérés
curl -X 'GET' \
'https://api.fabrixa.com/v2/integration/shipping/countries?sku=DDC-140200' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
-H 'X-Application-Key: APPLICATION_KEY'
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/shipping/countries"
},
"meta": {
"total": 2
},
"data": [
{
"code": "BE",
"name": "Belgium",
"min_shipping_price": "7.75",
"max_shipping_price": "9.85",
"currency": "EUR",
"min_eta_days": 1,
"max_eta_days": 2
},
{
"code": "NL",
"name": "Netherlands",
"min_shipping_price": "6.70",
"max_shipping_price": "8.40",
"currency": "EUR",
"min_eta_days": 1,
"max_eta_days": 1
}
]
}
A válasz mezői
codeésname- az ország, az ISO 3166-1 alpha-2 kóddal, amelyet acountry_codeparaméterben adhat meg a becsléshez.min_shipping_priceésmax_shipping_price- annak tartománya, hogy egyetlen szállítási csomag mennyibe kerül ebbe az országba, áfa nélkül, acurrencymezőben megadott pénznemben, mindazon szállítási csomagokat figyelembe véve, amelyekbe a változat becsomagolható. Egy több egységből álló megrendeléshez több csomag is kellhet, ezért egy adott mennyiség árához kérjen becslést.min_eta_daysésmax_eta_days- annak tartománya, hány napig van úton egy csomag, miután átadták a futárszolgálatnak, a gyártási időt nem számítva;null, ha a díjszabások nem tartalmaznak becsült kézbesítési időt.
Szállítás becslése
Ha meg szeretné tudni, mennyibe kerülne egy termékváltozat szállítása és mennyi ideig lenne úton, küldjön GET kérést a https://api.fabrixa.com/v2/integration/shipping/estimate címre a hitelesítő adataival. A becslés ugyanazokat a szabályokat követi, amelyek szerint egy megrendelés ára kialakul: az egységeket a rendszer a változatot gyártó telephely szállítási csomagjaiba csomagolja, és minden csomag árát a telephelyről a célországba vezető útvonal alapján számítja ki. A rendszer semmit nem rendel meg és nem foglal le, a megrendelés árát pedig a leadásakor számítja ki, így annak szállítási díja eltérhet, ha a díjszabás időközben megváltozik.
Lekérdezési paraméterek
variant_idvagysku- a változat, ugyanúgy megadva, mint egy rendelési sorban: valamelyik termékének változata vagy egy katalógusváltozat. Olyan változatnak kell lennie, amelyet megrendelhet.country_code- annak az országnak az ISO 3166-1 alpha-2 kódja, ahová a megrendelést szállítják, példáulNL.quantity- az egységek száma, 1 és 1000 között.
Példakérés
curl -X 'GET' \
'https://api.fabrixa.com/v2/integration/shipping/estimate?sku=DDC-140200&country_code=NL&quantity=2' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
-H 'X-Application-Key: APPLICATION_KEY'
Példaválasz
{
"links": {
"self": "https://api.fabrixa.com/v2/integration/shipping/estimate"
},
"meta": [],
"data": {
"variant_id": 32323,
"sku": "DDC-140200",
"quantity": 2,
"country_code": "NL",
"origin_country": {
"code": "PT",
"name": "Portugal"
},
"packages_count": 1,
"packages": [
{
"package_type": "Small Box",
"length": 30,
"width": 20,
"height": 10,
"quantity": 1,
"price": "7.45",
"eta_days": 3
}
],
"shipping_price": "7.45",
"currency": "EUR",
"eta_days": 3
}
}
A válasz mezői
variant_id,sku,quantityéscountry_code- a változat, a mennyiség és a célország, amelyre a becslés vonatkozik.origin_country- az ország, ahonnan a változatot szállítják, acodeésnamemezőkkel.packages_count- azoknak a szállítási csomagoknak a száma, amelyekbe az egységeket csomagolják.packages- maguk a csomagok, csomagtípusonként egy tétellel: apackage_type, a csomaglength,widthésheightértéke cm-ben, az ilyen csomagokquantitymennyisége, egy csomag szállításánakpriceára és azeta_daysértéke. Az árak és a mennyiségek szorzatainak összege ashipping_price.shipping_price- az összes csomag együttes szállítási díja áfa nélkül, acurrencymezőben megadott pénznemben. Ha egy útvonalhoz nincs szállítási díjszabás, a szállítás ingyenes, ahogy egy megrendelésnél is, és az ára0.00.eta_days- a napok száma, ameddig a leglassabb csomag úton van, miután átadták a futárszolgálatnak, a gyártási időt nem számítva;null, ha az útvonalhoz nincs becsült kézbesítési idő.
A validáción fennakadó kérésre az API 400 Bad Request válasszal és mezőnként az okkal felel, ugyanazokkal az üzenetekkel, mint egy rendelési sornál, például The variant not found. Ha egyetlen szállítási csomagba sem férnek bele az egységek, a válasz 400 Bad Request a No shipping package can carry the variant. üzenettel.
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.
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.
application_key- egyedi kulcs az Integration API-hoz való hitelesítéshez.product_sku- a termékváltozat SKU-ja, az Integration API-ból lekérve.cart_item_key- a beágyazó platformról származó egyedi érték, amely a termékhez tartozó kosártételt azonosítja. A felhasználói testreszabások mentésére szolgál; a megrendelés létrehozásakor azonosítja a mentett testreszabásokat, és a megrendeléshez rendeli őket. Lásd az alábbi példát.locale(opcionális) - a Studio felületének és hibaüzeneteinek nyelve, pl.de_DEvagyde. Nélküle a Studio a vásárló böngészőjének nyelvén nyílik meg, ha az támogatott, egyébként angolul.
A Studio fejléce a termék nevét úgy mutatja, ahogy az az Ön boltjában szerepel - ugyanazt a címet, amelyet a vásárlói látnak -, alatta a kiválasztott változat opcióival. Ez a termék saját másolata az Ön boltjában, így a Fabrixában módosított név a Studióban is megjelenik; a locale nem fordítja le.
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": {
"...": "..."
}
}
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.
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;" />
Élő bemutató
A testreszabás előnézete itt jelenik meg, miután a dizájn elkészült.
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.
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",
"user-agent": "Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook)",
"x-webhook-signature": "YmEwNjBhMGMyMzE3ZWQ5NGQ5NDYwOGVhNzNhMjQ4M2MyODZkZmI3NTQ1YzYxYjdkMzNhZjgzYzBmMTkxYTAxMw==",
"x-webhook-topic": "order.updated"
}
A fejlécek részletei
content-type- webhookok esetén mindigapplication/json.x-webhook-signature- a kérés ellenőrzésére szolgáló HMAC-SHA256 aláírás.x-webhook-topic- a webhook eseménytípusa vagy témája. Például:order.created- új megrendelés létrehozásakor indul.order.updated- meglévő megrendelés frissítésekor indul.
A webhookokat a Fabrixa/2.0 (+https://api.fabrixa.com/docs/integration#webhooks; webhook) User-Agenttel küldjük; ha a végpontja szűri az automatizált forgalmat, engedélyezze. Ha biztos akar lenni abban, hogy egy kérés a Fabrixától jön, ellenőrizze az x-webhook-signature fejlécet.
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éma | Leí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. |
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": "accepted",
"fulfillment_status": "fulfilled",
"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": "fulfilled",
"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"
}
}
]
}
],
"shipments": [
{
"id": 4182,
"carrier": "PostNL",
"method": "Standard",
"status": "registered",
"tracking_number": "3SABCD1234567",
"tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD1234567-NL-1012AB",
"packages": [
{
"tracking_number": "3SABCD1234567",
"tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD1234567-NL-1012AB"
}
],
"expected_delivery_date": "2025-04-22",
"created_at": "2025-04-18T07:43:50.000000Z"
}
]
}
Amint a megrendelést feladták, a shipments felsorolja az egyes szállítmányokat a futárszolgálattal (carrier), a szállítási móddal (method), az állapottal (status: pending, registered, collected, in transit, delivered, failed, returned vagy canceled) és a nyomkövetéssel: tracking_number és tracking_url, valamint ugyanezt csomagonként a packages mezőben, ha egy szállítmány több csomagból áll. Egy szállítmány állapotának vagy nyomkövetésének minden változásakor egy order.updated webhook kerül kiküldésre, és a GET /orders/{order_id} ugyanezt a mezőt adja vissza.
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.
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:
2xx- sikeres feldolgozást jelez, például200 OK.301és302- átirányítási válaszok, amelyek azt jelzik, hogy a webhookot sikeresen kezelték vagy továbbították.
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.