API Pedagang: sambungkan SKU, pemberitahuan awal pembelian dan stok gudang Shenzhen ke sistem anda
Untuk syarikat berdaftar yang berniaga di Shopee, Coupang dan momo. Hantar kod bar produk yang dijana semasa menyenaraikan produk melalui API, beri pemberitahuan awal nombor penjejakan dan kandungan semasa membuat pembelian, dan apabila barang tiba di gudang Shenzhen, pesanan kerja dibuka secara automatik, barang dilabel dan diimbas ke rak satu demi satu, dengan stok dan perbezaan dilaporkan semula secara masa nyata.
Syarikat berdaftar
Siapa boleh memohon (perlu nombor cukai perniagaan 8 digit)
200 item
Had SKU bagi setiap permintaan pukal
WO-SK
Pesanan kerja pelabelan dibuka automatik semasa barang tiba
60 / min
Had kadar lalai bagi setiap kunci
1 Gambaran keseluruhan
Fasa 1 meliputi “produk dan penerimaan stok”: daripada mencipta SKU hingga barang disusun ke rak sebagai stok di gudang Shenzhen.
Perkara yang boleh dilakukan sekarang
- Cipta atau kemas kini SKU secara pukal (berdasarkan
seller_skuanda), dengan kod bar produk tersendiri bagi setiap warna dan saiz, dan pautkan kepada nombor varian produk Shopee / Coupang / momo. - Semak keperluan import secara automatik berdasarkan kod tarif Taiwan 11 digit, dan tandakan produk yang memerlukan pemeriksaan, permit atau tidak boleh diimport.
- Beri pemberitahuan awal nombor penjejakan dan kandungan setiap kotak semasa membuat pembelian; apabila barang tiba di gudang Shenzhen, pesanan kerja pelabelan WO-SK dibuka secara automatik dan gudang melabel serta mengimbas setiap unit ke rak.
- Semak stok mengikut gudang dan lejar stok, serta terima pemberitahuan webhook secara masa nyata untuk ketibaan di gudang, penerimaan selesai, perbezaan kuantiti dan perubahan stok.
Aliran penerimaan stok
- Cipta SKU: hantar kod bar produk, varian, nama pengisytiharan dan kod tarif.
- Pemberitahuan awal penerimaan: hantar nombor penjejakan dan kuantiti dijangka bagi setiap SKU.
- Ketibaan di gudang Shenzhen: selepas nombor penjejakan diimbas, pesanan kerja WO-SK dibuka dan dicetak secara automatik.
- Pelabelan dan penyusunan ke rak: gudang mencetak kod bar produk, melabel setiap unit dan mengimbasnya untuk dikira.
- Penerimaan selesai: kuantiti sebenar yang diterima masuk ke stok gudang Shenzhen, unit rosak dikira berasingan, dan perbezaan dimaklumkan kepada sistem anda.
Ciri yang dirancang
Pesanan penghantaran keluar secara pukal, kelompok penghantaran yang dikumpulkan secara automatik mengikut peraturan pengisytiharan, serta stok hadapan, pengisihan dan label penghantaran platform di gudang Taoyuan. Ciri ini akan diumumkan di halaman ini apabila dilancarkan.
2 Permohonan dan kunci API
API Pedagang hanya dibuka kepada syarikat berdaftar, dan setiap kunci diikat kepada satu akaun pedagang yang telah diluluskan.
Langkah pengaktifan
- Di pusat ahli, tambah pengisytihar jenis “syarikat” dan isikan nombor cukai perniagaan 8 digit.
- Hubungi khidmat pelanggan HowBridge untuk memohon pengaktifan API Pedagang; kunci akan dikeluarkan selepas permohonan diluluskan.
- Kunci hanya dipaparkan sekali. Simpan kunci dalam pemboleh ubah persekitaran di sisi pelayan, dan jangan letakkan dalam pelayar atau aplikasi.
- Jika memerlukan webhook, tetapkan dan sahkan URL di halaman API pusat ahli terlebih dahulu, kemudian langgan acara pedagang.
Authorization: Bearer <kunci>. Token yang dijana apabila ahli biasa log masuk ke aplikasi atau laman web tidak boleh memanggil API Pedagang.Authorization: Bearer 12|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Accept: application/json
3 Konvensyen umum
Semua titik akhir berkongsi peraturan berikut.
Base URL
Format dan bahasa
Permintaan dan respons menggunakan JSON. Mesej ralat secara lalai dalam bahasa Cina Tradisional; hantar Accept-Language: en untuk menerimanya dalam bahasa Inggeris. Logik program hendaklah sentiasa menggunakan error.code yang tetap dalam bahasa Inggeris.
Struktur respons
Jika berjaya, respons ialah {"success": true, "data": …, "meta": …}; jika gagal, {"success": false, "error": {"code", "message", "errors", "context"}}, dengan errors mengandungi butiran bagi setiap medan. Satu-satunya pengecualian ialah apabila kunci tidak dihantar atau tidak sah: HTTP 401, dengan body {"message": "Unauthenticated."}.
{
"success": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "…",
"errors": [
{ "code": "TRACKING_IN_USE", "field": "packages.0.tracking_no", "message": "…" }
]
}
}
Had kadar
Setiap kunci dihadkan kepada 60 permintaan seminit dan 5,000 permintaan sehari (pelan penggunaan tinggi: 300 seminit dan 50,000 sehari); satu permintaan pukal dikira sebagai satu permintaan. Untuk data masa nyata, langgan webhook dan jangan membuat tinjauan berulang (polling).
| Pengepala respons | Penerangan |
|---|---|
X-RateLimit-Limit | Had seminit |
X-RateLimit-Remaining | Baki permintaan bagi minit ini |
X-RateLimit-Limit-DayX-RateLimit-Remaining-Day | Had harian dan baki permintaan |
Retry-After | Bilangan saat sebelum boleh mencuba semula selepas melebihi had |
Idempotensi (Idempotency-Key)
Permintaan tulis boleh menyertakan pengepala Idempotency-Key (8–128 aksara: huruf, digit dan _-:.). Selepas tamat masa rangkaian, hantar semula dengan kunci dan kandungan yang sama untuk menerima respons pertama, bersama pengepala Idempotent-Replayed: true; kunci yang sama dengan kandungan berbeza akan mengembalikan 422. Rekod disimpan selama 24 jam.
Respons pukal
Titik akhir pukal melaporkan hasil bagi setiap item: 200 jika semua berjaya, 207 jika sebahagian gagal, dan 422 jika semua gagal. Setiap item mempunyai index, status (created / updated / failed) dan sebab kegagalan.
Aksara pengecam
seller_sku hanya boleh menggunakan huruf, digit dan ._- (1–64 aksara); kod bar produk juga boleh menggunakan / dan + (3–64 aksara). Huruf besar dan huruf kecil dianggap sama.
4 SKU produk
SKU dikenal pasti secara unik melalui seller_sku anda: menghantar seller_sku yang sama sekali lagi bermakna kemas kini, dan hanya medan yang disertakan akan diubah.
Cipta atau kemas kini SKU secara pukal
POST/api/v1/merchant/skus/batch
Maksimum 200 item bagi setiap permintaan. Setiap item diproses secara berasingan, jadi kegagalan satu item tidak menjejaskan item lain.
| Medan | Jenis | Wajib | Penerangan |
|---|---|---|---|
seller_sku | string | Wajib | Kod SKU anda, contohnya SKU varian produk di Shopee. |
product_name | string | Wajib semasa mencipta | Nama produk. SKU dengan nama yang sama dikumpulkan di bawah satu produk. |
barcode | string | Pilihan | Kod bar produk; gudang mencetak label dan mengimbas barang ke rak berdasarkan kod ini. Setiap warna dan saiz mesti mempunyai kod bar yang berbeza. Jika tiada kod bar, biarkan kosong dan sistem akan menjana kod bar sistem. Jika melebihi 16 aksara, label akan dicetak dengan kod bar sistem. |
gtin | string | Pilihan | GTIN (8 / 12 / 13 / 14 digit, digit semak disahkan). Untuk produk Shopee yang “tiada GTIN”, hantar 00. |
spec | object | Pilihan | Varian, contohnya {"color": "hitam", "size": "M"}, maksimum 5 item. |
declared_name_zhdeclared_name_en | string | Pilihan | Nama pengisytiharan (Cina / Inggeris). Nyatakan bahan dan kegunaan; jangan tulis “sampel” atau “hadiah”. |
declared_unit_value | number | Pilihan | Nilai unit pengisytiharan, iaitu harga belian seunit daripada pembekal anda, bukan harga jualan di platform. |
declared_currency | string | Pilihan | CNY, TWD atau USD; wajib jika nilai unit diisi. |
hs_code | string | Pilihan | Kod pengelasan barangan 11 digit; sistem menyemak keperluan import berdasarkan kod ini. |
origin_country | string | Pilihan | Kod ISO negara asal, lalai CN. |
weight_g | integer | Pilihan | Berat seunit (gram). |
dimensions_cm | array | Pilihan | Panjang, lebar dan tinggi (cm), contohnya [20, 15, 3]. |
battery_type | string | Pilihan | none, contained (terbina dalam), packed (disertakan bersama) atau standalone (bateri sahaja). |
channels | array | Pilihan | Pautan produk platform, maksimum 20 set: platform (shopee / coupang / momo / other), shop_id, item_id, model_id, platform_sku. |
Contoh permintaan (POST JSON)
curl -X POST https://0523.tw/api/v1/merchant/skus/batch \ -H "Authorization: Bearer $LUCKY_MERCHANT_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: sku-sync-20260917-001" \ -d '{ "items": [ { "seller_sku": "TEE-RED-S", "barcode": "4710000000011", "product_name": "Cotton T-shirt", "spec": { "color": "red", "size": "S" }, "declared_name_en": "Cotton knitted T-shirt", "declared_unit_value": 18.5, "declared_currency": "CNY", "hs_code": "61091000006", "weight_g": 160, "channels": [ { "platform": "shopee", "shop_id": "123456", "item_id": "2233", "model_id": "445566" } ] } ] }'
Maklum balas 200
{
"success": true,
"data": [
{
"index": 0,
"seller_sku": "TEE-RED-S",
"status": "created",
"sku": {
"seller_sku": "TEE-RED-S",
"barcode": "4710000000011",
"system_barcode": null,
"pick_code": "131999",
"hs_code": "61091000006",
"regulation": { "status": "ok", "import_codes": [], "reasons": [] },
"channels": [ { "platform": "shopee", "shop_id": "123456", "item_id": "2233", "model_id": "445566", "platform_sku": null } ]
}
}
],
"meta": { "summary": { "created": 1, "updated": 0, "failed": 0 } }
}
Penentuan keperluan import (regulation.status)
| ok | Tiada kod keperluan import. |
| review_required | Keperluan hanya meliputi sebahagian produk (contohnya C02 “sebahagian produk di bawah item ini tertakluk kepada pemeriksaan”); sahkan berdasarkan kegunaan sebenar produk. |
| formal_required | Tertakluk kepada keperluan import (pemeriksaan, kuarantin, permit dan sebagainya); pengisytiharan ringkas tidak boleh digunakan. |
| blocked | Barangan tanah besar China yang dilarang diimport (MW0, negara asal tanah besar China); tidak boleh diberi pemberitahuan awal penerimaan. |
| unclassified | Kod tarif belum diberikan, jadi penentuan tidak dapat dibuat. |
Senaraikan SKU
GET/api/v1/merchant/skus
Tapis mengikut seller_sku, barcode, regulation_status atau updated_since (ISO 8601); gunakan page / per_page (maksimum 100) untuk penomboran halaman.
Dapatkan satu SKU
GET/api/v1/merchant/skus/{seller_sku}
Kemas kini pautan produk platform
PUT/api/v1/merchant/skus/{seller_sku}/channels
Senarai yang dihantar akan menggantikan semua pautan sedia ada; varian platform yang sama tidak boleh dipautkan kepada dua SKU pada masa yang sama.
Muat turun label kod bar produk
GET/api/v1/merchant/skus/{seller_sku}/label.pdf?qty=10
Mengembalikan PDF label 40×30mm; qty ialah bilangan label (1–1000). Gudang Shenzhen mencetak label yang sama semasa pelabelan; titik akhir ini disediakan jika anda mahu melabel sendiri sebelum penghantaran.
5 Pemberitahuan awal penerimaan
Selepas pembekal menghantar barang yang dibeli, beri pemberitahuan awal nombor penjejakan dan kandungannya. Satu pesanan penerimaan boleh mempunyai beberapa nombor penjejakan, dan setiap nombor menyenaraikan SKU serta kuantiti.
Cipta pesanan penerimaan
POST/api/v1/merchant/inbound-orders
Disahkan secara keseluruhan: jika terdapat sebarang ralat, tiada apa-apa yang dicipta. Satu nombor penjejakan hanya boleh berada dalam satu pesanan penerimaan yang sedang aktif pada satu masa; SKU berulang dalam bungkusan yang sama akan digabungkan kuantitinya.
| Medan | Jenis | Wajib | Penerangan |
|---|---|---|---|
reference_no | string | Wajib | Nombor pesanan belian atau pesanan penerimaan anda, unik bagi setiap pedagang (huruf, digit dan ._-/). |
supplier_order_no | string | Pilihan | Nombor pesanan pembekal, contohnya nombor pesanan 1688. |
warehouse_code | string | Pilihan | Gudang penerimaan; buat masa ini hanya SZ (gudang Shenzhen). |
notes | string | Pilihan | Catatan (maksimum 1,000 aksara). |
packages | array | Wajib | Senarai bungkusan kurier, maksimum 50. |
packages[].tracking_no | string | Wajib | Nombor penjejakan kurier China. |
packages[].carrier | string | Pilihan | Kod syarikat kurier, contohnya yto atau sf. |
packages[].items | array | Wajib | Kandungan bungkusan: seller_sku dan qty, maksimum 500 baris bagi keseluruhan pesanan penerimaan. |
Contoh permintaan (POST JSON)
curl -X POST https://0523.tw/api/v1/merchant/inbound-orders \ -H "Authorization: Bearer $LUCKY_MERCHANT_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: po-20260917-0001" \ -d '{ "reference_no": "PO-20260917-0001", "supplier_order_no": "1688-3312456789", "packages": [ { "tracking_no": "YT1234567890123", "carrier": "yto", "items": [ { "seller_sku": "TEE-RED-S", "qty": 40 }, { "seller_sku": "TEE-RED-M", "qty": 60 } ] } ] }'
reference_no yang sama sekali lagi akan mengembalikan 409 INBOUND_REFERENCE_EXISTS, dan error.context.inbound_order_id membawa id pesanan penerimaan asal. Untuk mencuba semula dengan selamat, sertakan Idempotency-Key.Status pesanan penerimaan
| created | Pemberitahuan awal telah dihantar; belum ada bungkusan yang tiba di gudang. |
| partially_arrived | Sebahagian bungkusan telah tiba di gudang Shenzhen. |
| arrived | Semua bungkusan telah tiba di gudang; pelabelan dan penyusunan ke rak sedang dijalankan. |
| completed | Semua telah disusun ke rak, dan kuantiti sepadan dengan pemberitahuan awal. |
| completed_with_discrepancy | Semua selesai, tetapi terdapat kekurangan, lebihan atau kerosakan. |
| cancelled | Dibatalkan. |
Status bungkusan
| awaiting_arrival | Menunggu ketibaan di gudang. |
| labeling | Telah tiba di gudang dan pesanan kerja telah dibuka; pelabelan dan penyusunan ke rak sedang dijalankan. |
| received | Penyusunan ke rak selesai. |
| mismatch | Pemilikan bungkusan semasa daftar masuk gudang tidak sepadan dengan pemberitahuan awal anda; khidmat pelanggan sedang menyemak. |
| cancelled | Dibatalkan atau tidak lagi sah; nombor penjejakan telah dilepaskan. |
Senaraikan pesanan penerimaan
GET/api/v1/merchant/inbound-orders
GET/api/v1/merchant/inbound-orders/{id}
Tapis mengikut status, reference_no atau updated_since. Setiap bungkusan mengembalikan kuantiti dijangka, diterima dan rosak, serta perbezaannya.
Batalkan pesanan penerimaan
POST/api/v1/merchant/inbound-orders/{id}/cancel
Pembatalan hanya dibenarkan selagi belum ada bungkusan yang tiba di gudang; selepas dibatalkan, nombor penjejakan boleh diberi pemberitahuan awal semula.
6 Pertanyaan inventori
Stok diasingkan mengikut gudang: SZ gudang Shenzhen, TY gudang Taoyuan (stok gudang Taoyuan dibuka bersama ciri penghantaran keluar).
Semak inventori
GET/api/v1/merchant/inventory?warehouse_code=SZ
Tapis mengikut warehouse_code dan seller_sku[] (maksimum 200).
on_hand | Kuantiti dalam stok. |
reserved | Kuantiti yang telah ditempah untuk pesanan. |
available | Kuantiti tersedia = dalam stok − ditempah. |
damaged | Kuantiti rosak; tidak boleh dihantar. |
Maklum balas 200
{
"success": true,
"data": [
{ "seller_sku": "TEE-RED-S", "barcode": "4710000000011", "warehouse_code": "SZ",
"on_hand": 38, "reserved": 0, "available": 38, "damaged": 2, "updated_at": "2026-09-17T15:20:11+08:00" }
],
"meta": { "total": 1, "page": 1, "per_page": 100, "last_page": 1 }
}
Lejar stok
GET/api/v1/merchant/inventory/movements?after_id=0&limit=200
Rekod pergerakan yang hanya ditambah dan tidak pernah diubah. Gunakan kursor after_id untuk menyelak halaman ke hadapan (maksimum 500 rekod setiap kali), dan simpan meta.next_after_id daripada respons untuk meneruskan penyesuaian akaun.
7 Acara webhook
Acara dihantar terus ke URL anda sebaik sahaja berlaku, jadi anda tidak perlu membuat tinjauan berulang.
Cara penetapan
- Di halaman API pusat ahli, tetapkan URL webhook (hanya https) dan lengkapkan pengesahan pemilikan: titik akhir anda mesti membalas HTTP 200 dengan body
{"challenge": "nilai yang diterima"}. - Panggil
PUT /api/v1/merchant/webhook/eventsuntuk melanggan acara pedagang. Menukar URL di pusat ahli kemudian tidak akan membuang langganan acara pedagang.
curl -X PUT https://0523.tw/api/v1/merchant/webhook/events \ -H "Authorization: Bearer $LUCKY_MERCHANT_KEY" \ -H "Content-Type: application/json" \ -d '{"events": ["inbound.arrived", "inbound.received", "inbound.discrepancy", "inventory.changed"]}'
Senarai acara
sku.regulation_flagged | Penentuan keperluan import bagi SKU berubah kepada perlu disahkan, perlu pengisytiharan kastam formal, atau dilarang diimport. |
inbound.arrived | Bungkusan tiba di gudang Shenzhen dan pesanan kerja telah dibuka. |
inbound.mismatch | Pemilikan bungkusan semasa daftar masuk gudang tidak sepadan dengan pemberitahuan awal; khidmat pelanggan sedang menyemak. |
inbound.received | Penyusunan bungkusan ke rak selesai, bersama kuantiti dijangka, diterima dan rosak bagi setiap SKU. |
inbound.discrepancy | Kuantiti yang disusun ke rak berbeza daripada pemberitahuan awal atau terdapat kerosakan (dihantar serentak dengan inbound.received). |
inventory.changed | Stok berubah, bersama inventori terkini bagi SKU yang terlibat. |
inbound.received
{
"event": "inbound.received",
"delivery_id": "5b0f1c2e-8f3a-4d7e-9c21-0a6b2d4e8f10",
"created_at": "2026-09-17T15:20:11+08:00",
"data": {
"inbound_order_id": 128,
"reference_no": "PO-20260917-0001",
"order_status": "completed_with_discrepancy",
"tracking_no": "YT1234567890123",
"work_order": "WO-SK-315",
"warehouse_code": "SZ",
"items": [
{ "seller_sku": "TEE-RED-S", "expected_qty": 40, "received_qty": 38, "damaged_qty": 2, "difference": 0 },
{ "seller_sku": "TEE-RED-M", "expected_qty": 60, "received_qty": 59, "damaged_qty": 0, "difference": -1 }
],
"received_at": "2026-09-17T15:20:10+08:00"
}
}
Sahkan tandatangan
Setiap penghantaran menyertakan X-Lucky-Event, X-Lucky-Delivery-Id dan X-Lucky-Signature: t=cap_masa,v1=tandatangan. Kira HMAC-SHA256 dengan webhook secret anda ke atas “cap masa + . + body mentah”, bandingkan dengan v1, dan tolak cap masa yang lebih lama daripada 5 minit. Apabila acara yang sama dicuba semula, delivery_id tidak berubah dan boleh digunakan untuk menyingkirkan pendua.
Respons bukan 2xx akan dicuba semula selepas 1 minit, 5 minit, 30 minit, 2 jam dan 6 jam; selepas 20 kegagalan berturut-turut, webhook dinyahaktifkan secara automatik dan perlu ditetapkan semula di pusat ahli.
// PHP $body = file_get_contents('php://input'); $header = $_SERVER['HTTP_X_LUCKY_SIGNATURE'] ?? ''; parse_str(str_replace(',', '&', $header), $sig); // ['t' => '1789…', 'v1' => 'ab12…'] $expected = hash_hmac('sha256', ($sig['t'] ?? '') . '.' . $body, getenv('LUCKY_WEBHOOK_SECRET')); if (! hash_equals($expected, $sig['v1'] ?? '') || abs(time() - (int) ($sig['t'] ?? 0)) > 300) { http_response_code(400); exit; } $event = json_decode($body, true); // de-duplicate by $event['delivery_id'] http_response_code(200);
8 Kod ralat
error.code sentiasa dalam bahasa Inggeris. Berikut ialah ralat yang biasa berlaku.
| HTTP | error.code | Penerangan |
|---|---|---|
| 401 | — | Kunci tidak dihantar, tidak sah atau telah tamat tempoh (body ialah {"message": "Unauthenticated."}). |
| 403 | MERCHANT_TOKEN_REQUIRED | Token ini tiada kebenaran API Pedagang (contohnya token yang dijana apabila ahli biasa log masuk). |
| 403 | MERCHANT_NOT_APPROVEDMERCHANT_SUSPENDED | Akaun belum diluluskan sebagai pedagang, atau pedagang telah digantung. |
| 403 | APP_SUSPENDEDAPP_REVOKEDAPP_NOT_FOUND | Aplikasi API bagi kunci ini telah digantung atau dibatalkan. |
| 422 | VALIDATION_FAILEDPRODUCT_NAME_REQUIRED | Format data tidak sah; lihat butiran bagi setiap medan dalam error.errors. |
| 422 | BATCH_TOO_LARGE | Bilangan item dalam permintaan pukal melebihi had. |
| 207 / 409 | SKU_BARCODE_DUPLICATESKU_BARCODE_CONFLICT | Kod bar produk sudah digunakan oleh SKU lain, atau sama dengan kod bar sistem atau kod ambil (pick code) SKU lain. |
| 207 / 422 | GTIN_INVALIDHS_CODE_NOT_FOUND | Digit semak GTIN tidak sah, atau kod tarif tidak wujud. |
| 404 / 422 | SKU_NOT_FOUNDSKU_IMPORT_BLOCKED | SKU tidak ditemui, atau SKU ialah produk yang dilarang diimport dan tidak boleh diberi pemberitahuan awal. |
| 409 | INBOUND_REFERENCE_EXISTS | Nombor rujukan pesanan penerimaan sudah wujud. |
| 422 | TRACKING_IN_USETRACKING_FORECASTED_BY_OTHERTRACKING_ALREADY_WAREHOUSEDTRACKING_NOT_AVAILABLE | Nombor penjejakan sudah berada dalam pesanan penerimaan yang sedang aktif, telah diberi pemberitahuan awal oleh ahli lain, atau telah didaftar masuk gudang di bawah nama ahli lain. |
| 409 | INBOUND_NOT_CANCELLABLE | Sudah ada bungkusan yang tiba di gudang, jadi pesanan penerimaan tidak boleh dibatalkan. |
| 400 / 409 / 422 | IDEMPOTENCY_KEY_INVALIDIDEMPOTENCY_IN_PROGRESSIDEMPOTENCY_KEY_REUSED | Format Idempotency-Key tidak sah, digunakan untuk kandungan yang berbeza, atau permintaan sebelumnya masih diproses. |
| 409 | CONFLICT_RETRY | Rekod yang sama sedang diubah oleh permintaan lain; sila hantar semula sebentar lagi. |
| 429 | RATE_LIMIT_EXCEEDED | Had kadar dilampaui; tunggu mengikut Retry-After sebelum mencuba semula. |
9 Contoh kod
Jalankan contoh berikut di sisi pelayan; jangan letakkan kunci dalam kod bahagian hadapan.
use Illuminate\Support\Facades\Http; use Illuminate\Support\Str; $api = Http::withToken(config('services.lucky.merchant_key')) ->acceptJson() ->baseUrl('https://0523.tw/api/v1/merchant') ->timeout(20); // 1) Sync SKUs (up to 200 per request) $res = $api->withHeaders(['Idempotency-Key' => (string) Str::uuid()]) ->post('/skus/batch', ['items' => $items]); foreach ($res->json('data') as $row) { if ($row['status'] === 'failed') { logger()->warning('SKU failed', $row['errors']); } } // 2) Forecast an inbound order $order = $api->withHeaders(['Idempotency-Key' => 'po-' . $po->id]) ->post('/inbound-orders', [ 'reference_no' => $po->number, 'packages' => [[ 'tracking_no' => $po->tracking_no, 'items' => [['seller_sku' => 'TEE-RED-S', 'qty' => 40]], ]], ])->throw()->json('data'); // 3) Read Shenzhen stock $stock = $api->get('/inventory', ['warehouse_code' => 'SZ'])->json('data');
// Node.js 18+ (server side only) import { randomUUID } from 'node:crypto'; const base = 'https://0523.tw/api/v1/merchant'; const headers = { Authorization: `Bearer ${process.env.LUCKY_MERCHANT_KEY}`, 'Content-Type': 'application/json', Accept: 'application/json', }; const res = await fetch(`${base}/skus/batch`, { method: 'POST', headers: { ...headers, 'Idempotency-Key': randomUUID() }, body: JSON.stringify({ items }), }); const { data, meta } = await res.json(); console.log(meta.summary); // { created, updated, failed } const stock = await fetch(`${base}/inventory?warehouse_code=SZ`, { headers }).then(r => r.json());
import os, uuid, requests base = "https://0523.tw/api/v1/merchant" session = requests.Session() session.headers.update({ "Authorization": f"Bearer {os.environ['LUCKY_MERCHANT_KEY']}", "Accept": "application/json", }) r = session.post(f"{base}/inbound-orders", headers={"Idempotency-Key": "po-20260917-0001"}, json={ "reference_no": "PO-20260917-0001", "packages": [{"tracking_no": "YT1234567890123", "items": [{"seller_sku": "TEE-RED-S", "qty": 40}]}], }, timeout=20) if r.status_code == 409: existing_id = r.json()["error"]["context"]["inbound_order_id"] else: r.raise_for_status()
10 Sokongan teknikal
Jika menghadapi sebarang masalah semasa integrasi, berikan masa permintaan, titik akhir dan error.code supaya kami dapat membantu menyiasat.
Akaun rasmi LINE @0523tw
E-mel teknikal howyunqisoftware@gmail.com
Versi v1 Fasa 1 (2026-09-17): SKU produk, pemberitahuan awal penerimaan, pelabelan dan penyusunan ke rak di gudang Shenzhen, pertanyaan inventori, webhook.