pasaran perkhidmatan API Pedagang
Fasa 1: Produk dan penerimaan stok

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_sku anda), 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

  1. Cipta SKU: hantar kod bar produk, varian, nama pengisytiharan dan kod tarif.
  2. Pemberitahuan awal penerimaan: hantar nombor penjejakan dan kuantiti dijangka bagi setiap SKU.
  3. Ketibaan di gudang Shenzhen: selepas nombor penjejakan diimbas, pesanan kerja WO-SK dibuka dan dicetak secara automatik.
  4. Pelabelan dan penyusunan ke rak: gudang mencetak kod bar produk, melabel setiap unit dan mengimbasnya untuk dikira.
  5. Penerimaan selesai: kuantiti sebenar yang diterima masuk ke stok gudang Shenzhen, unit rosak dikira berasingan, dan perbezaan dimaklumkan kepada sistem anda.
Mengenai keperluan import: sistem membuat penentuan secara automatik berdasarkan kod keperluan import dalam data tarif Pentadbiran Kastam Taiwan, dan hanya sebagai rujukan operasi. Sama ada produk sebenarnya memerlukan pemeriksaan, permit atau pengisytiharan kastam formal ditentukan melalui semakan pihak Kastam dan ejen kastam rakan kongsi kami. Stok yang disediakan oleh pedagang adalah untuk jualan dan tidak layak untuk had pengecualian permit bagi kegunaan peribadi.

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

  1. Di pusat ahli, tambah pengisytihar jenis “syarikat” dan isikan nombor cukai perniagaan 8 digit.
  2. Hubungi khidmat pelanggan HowBridge untuk memohon pengaktifan API Pedagang; kunci akan dikeluarkan selepas permohonan diluluskan.
  3. Kunci hanya dipaparkan sekali. Simpan kunci dalam pemboleh ubah persekitaran di sisi pelayan, dan jangan letakkan dalam pelayar atau aplikasi.
  4. Jika memerlukan webhook, tetapkan dan sahkan URL di halaman API pusat ahli terlebih dahulu, kemudian langgan acara pedagang.
Semua permintaan menggunakan 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

https://0523.tw/api/v1/merchant

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 responsPenerangan
X-RateLimit-LimitHad seminit
X-RateLimit-RemainingBaki permintaan bagi minit ini
X-RateLimit-Limit-Day
X-RateLimit-Remaining-Day
Had harian dan baki permintaan
Retry-AfterBilangan 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.

MedanJenisWajibPenerangan
seller_skustringWajibKod SKU anda, contohnya SKU varian produk di Shopee.
product_namestringWajib semasa menciptaNama produk. SKU dengan nama yang sama dikumpulkan di bawah satu produk.
barcodestringPilihanKod 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.
gtinstringPilihanGTIN (8 / 12 / 13 / 14 digit, digit semak disahkan). Untuk produk Shopee yang “tiada GTIN”, hantar 00.
specobjectPilihanVarian, contohnya {"color": "hitam", "size": "M"}, maksimum 5 item.
declared_name_zh
declared_name_en
stringPilihanNama pengisytiharan (Cina / Inggeris). Nyatakan bahan dan kegunaan; jangan tulis “sampel” atau “hadiah”.
declared_unit_valuenumberPilihanNilai unit pengisytiharan, iaitu harga belian seunit daripada pembekal anda, bukan harga jualan di platform.
declared_currencystringPilihanCNY, TWD atau USD; wajib jika nilai unit diisi.
hs_codestringPilihanKod pengelasan barangan 11 digit; sistem menyemak keperluan import berdasarkan kod ini.
origin_countrystringPilihanKod ISO negara asal, lalai CN.
weight_gintegerPilihanBerat seunit (gram).
dimensions_cmarrayPilihanPanjang, lebar dan tinggi (cm), contohnya [20, 15, 3].
battery_typestringPilihannone, contained (terbina dalam), packed (disertakan bersama) atau standalone (bateri sahaja).
channelsarrayPilihanPautan 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)

okTiada kod keperluan import.
review_requiredKeperluan hanya meliputi sebahagian produk (contohnya C02 “sebahagian produk di bawah item ini tertakluk kepada pemeriksaan”); sahkan berdasarkan kegunaan sebenar produk.
formal_requiredTertakluk kepada keperluan import (pemeriksaan, kuarantin, permit dan sebagainya); pengisytiharan ringkas tidak boleh digunakan.
blockedBarangan tanah besar China yang dilarang diimport (MW0, negara asal tanah besar China); tidak boleh diberi pemberitahuan awal penerimaan.
unclassifiedKod 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.

MedanJenisWajibPenerangan
reference_nostringWajibNombor pesanan belian atau pesanan penerimaan anda, unik bagi setiap pedagang (huruf, digit dan ._-/).
supplier_order_nostringPilihanNombor pesanan pembekal, contohnya nombor pesanan 1688.
warehouse_codestringPilihanGudang penerimaan; buat masa ini hanya SZ (gudang Shenzhen).
notesstringPilihanCatatan (maksimum 1,000 aksara).
packagesarrayWajibSenarai bungkusan kurier, maksimum 50.
packages[].tracking_nostringWajibNombor penjejakan kurier China.
packages[].carrierstringPilihanKod syarikat kurier, contohnya yto atau sf.
packages[].itemsarrayWajibKandungan 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 }
      ]
    }
  ]
}'
Perlindungan penghantaran semula: mencipta 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

createdPemberitahuan awal telah dihantar; belum ada bungkusan yang tiba di gudang.
partially_arrivedSebahagian bungkusan telah tiba di gudang Shenzhen.
arrivedSemua bungkusan telah tiba di gudang; pelabelan dan penyusunan ke rak sedang dijalankan.
completedSemua telah disusun ke rak, dan kuantiti sepadan dengan pemberitahuan awal.
completed_with_discrepancySemua selesai, tetapi terdapat kekurangan, lebihan atau kerosakan.
cancelledDibatalkan.

Status bungkusan

awaiting_arrivalMenunggu ketibaan di gudang.
labelingTelah tiba di gudang dan pesanan kerja telah dibuka; pelabelan dan penyusunan ke rak sedang dijalankan.
receivedPenyusunan ke rak selesai.
mismatchPemilikan bungkusan semasa daftar masuk gudang tidak sepadan dengan pemberitahuan awal anda; khidmat pelanggan sedang menyemak.
cancelledDibatalkan 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_handKuantiti dalam stok.
reservedKuantiti yang telah ditempah untuk pesanan.
availableKuantiti tersedia = dalam stok − ditempah.
damagedKuantiti 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

  1. 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"}.
  2. Panggil PUT /api/v1/merchant/webhook/events untuk 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_flaggedPenentuan keperluan import bagi SKU berubah kepada perlu disahkan, perlu pengisytiharan kastam formal, atau dilarang diimport.
inbound.arrivedBungkusan tiba di gudang Shenzhen dan pesanan kerja telah dibuka.
inbound.mismatchPemilikan bungkusan semasa daftar masuk gudang tidak sepadan dengan pemberitahuan awal; khidmat pelanggan sedang menyemak.
inbound.receivedPenyusunan bungkusan ke rak selesai, bersama kuantiti dijangka, diterima dan rosak bagi setiap SKU.
inbound.discrepancyKuantiti yang disusun ke rak berbeza daripada pemberitahuan awal atau terdapat kerosakan (dihantar serentak dengan inbound.received).
inventory.changedStok 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.

HTTPerror.codePenerangan
401—Kunci tidak dihantar, tidak sah atau telah tamat tempoh (body ialah {"message": "Unauthenticated."}).
403MERCHANT_TOKEN_REQUIREDToken ini tiada kebenaran API Pedagang (contohnya token yang dijana apabila ahli biasa log masuk).
403MERCHANT_NOT_APPROVED
MERCHANT_SUSPENDED
Akaun belum diluluskan sebagai pedagang, atau pedagang telah digantung.
403APP_SUSPENDED
APP_REVOKED
APP_NOT_FOUND
Aplikasi API bagi kunci ini telah digantung atau dibatalkan.
422VALIDATION_FAILED
PRODUCT_NAME_REQUIRED
Format data tidak sah; lihat butiran bagi setiap medan dalam error.errors.
422BATCH_TOO_LARGEBilangan item dalam permintaan pukal melebihi had.
207 / 409SKU_BARCODE_DUPLICATE
SKU_BARCODE_CONFLICT
Kod bar produk sudah digunakan oleh SKU lain, atau sama dengan kod bar sistem atau kod ambil (pick code) SKU lain.
207 / 422GTIN_INVALID
HS_CODE_NOT_FOUND
Digit semak GTIN tidak sah, atau kod tarif tidak wujud.
404 / 422SKU_NOT_FOUND
SKU_IMPORT_BLOCKED
SKU tidak ditemui, atau SKU ialah produk yang dilarang diimport dan tidak boleh diberi pemberitahuan awal.
409INBOUND_REFERENCE_EXISTSNombor rujukan pesanan penerimaan sudah wujud.
422TRACKING_IN_USE
TRACKING_FORECASTED_BY_OTHER
TRACKING_ALREADY_WAREHOUSED
TRACKING_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.
409INBOUND_NOT_CANCELLABLESudah ada bungkusan yang tiba di gudang, jadi pesanan penerimaan tidak boleh dibatalkan.
400 / 409 / 422IDEMPOTENCY_KEY_INVALID
IDEMPOTENCY_IN_PROGRESS
IDEMPOTENCY_KEY_REUSED
Format Idempotency-Key tidak sah, digunakan untuk kandungan yang berbeza, atau permintaan sebelumnya masih diproses.
409CONFLICT_RETRYRekod yang sama sedang diubah oleh permintaan lain; sila hantar semula sebentar lagi.
429RATE_LIMIT_EXCEEDEDHad 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');

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.

Hubungi khidmat pelanggan untuk pengaktifan