API Người bán: kết nối SKU, đơn mua đăng ký trước và tồn kho tại kho Thâm Quyến với hệ thống của bạn
Dành cho doanh nghiệp bán hàng trên Shopee, Coupang, momo. Gửi qua API mã vạch sản phẩm được tạo khi đăng bán, đăng ký trước mã vận đơn và hàng bên trong khi mua hàng; khi hàng đến kho Thâm Quyến, phiếu công việc được tạo tự động, hàng được dán mã và quét lên kệ từng sản phẩm, tồn kho và chênh lệch được gửi về theo thời gian thực.
Doanh nghiệp
Đối tượng áp dụng (cần mã số thuế Đài Loan 8 chữ số)
200
SKU tối đa mỗi lần gửi hàng loạt
WO-SK
Tự động tạo phiếu dán mã khi hàng đến kho
60 lần/phút
Giới hạn tần suất mặc định cho mỗi khóa
1 Tổng quan dịch vụ
Giai đoạn 1 cung cấp “Sản phẩm và nhập kho”: từ khi tạo SKU đến khi hàng được lên kệ và trở thành tồn kho tại kho Thâm Quyến.
Những gì bạn có thể làm hiện nay
- Tạo hoặc cập nhật SKU hàng loạt (dựa trên
seller_skucủa bạn), mỗi màu sắc và kích cỡ có mã vạch sản phẩm riêng, đồng thời liên kết với mã phân loại sản phẩm trên Shopee / Coupang / momo. - Tự động đối chiếu quy định nhập khẩu theo mã biểu thuế 11 chữ số, đánh dấu sản phẩm cần kiểm tra, cần giấy phép hoặc không được phép nhập khẩu.
- Đăng ký trước mã vận đơn và hàng bên trong từng thùng khi mua hàng; khi hàng đến kho Thâm Quyến, phiếu công việc dán mã WO-SK được tạo tự động, kho dán mã và quét lên kệ từng sản phẩm.
- Tra cứu tồn kho theo từng kho và sổ biến động tồn kho, đồng thời nhận ngay qua webhook các thông báo hàng đến kho, hoàn tất nhập kho, chênh lệch số lượng và thay đổi tồn kho.
Quy trình nhập kho
- Tạo SKU: gửi mã vạch sản phẩm, quy cách, tên hàng khai báo và mã biểu thuế.
- Đăng ký nhập kho trước: gửi mã vận đơn và số lượng dự kiến của từng SKU.
- Hàng đến kho Thâm Quyến: sau khi quét mã vận đơn, phiếu công việc WO-SK được tạo và in tự động.
- Dán mã và lên kệ: kho in mã vạch sản phẩm, dán lên từng sản phẩm và quét để đếm số lượng.
- Hoàn tất nhập kho: số lượng thực nhận được đưa vào tồn kho kho Thâm Quyến, hàng hư hỏng được tính riêng, chênh lệch được thông báo cho hệ thống của bạn.
Tính năng đang lên kế hoạch
Đơn xuất kho hàng loạt, lô xuất hàng được tự động nhóm theo quy định khai báo, cùng với tồn kho đặt sẵn, phân loại và nhãn vận chuyển của sàn tại kho Đào Viên. Các tính năng này sẽ được công bố trên trang này khi ra mắt.
2 Đăng ký và khóa API
API Người bán chỉ dành cho doanh nghiệp đã đăng ký, mỗi khóa được gắn với một tài khoản người bán đã được phê duyệt.
Các bước kích hoạt
- Trong trung tâm thành viên, thêm người khai báo loại “Công ty” và nhập mã số thuế Đài Loan 8 chữ số.
- Liên hệ bộ phận chăm sóc khách hàng HowBridge để đăng ký kích hoạt API Người bán; khóa sẽ được cấp sau khi được phê duyệt.
- Khóa chỉ hiển thị một lần. Hãy lưu trong biến môi trường phía máy chủ, không đưa vào trình duyệt hoặc ứng dụng.
- Nếu cần webhook, trước tiên hãy thiết lập và xác minh URL trong trang API của trung tâm thành viên, sau đó đăng ký nhận sự kiện người bán.
Authorization: Bearer <khóa API>. Token được tạo khi thành viên thông thường đăng nhập ứng dụng hoặc trang web không thể gọi API Người bán.Authorization: Bearer 12|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Accept: application/json
3 Quy ước chung
Tất cả endpoint đều áp dụng các quy tắc sau.
Base URL
Định dạng và ngôn ngữ
Yêu cầu và phản hồi đều là JSON. Thông báo lỗi mặc định bằng tiếng Trung phồn thể; gửi kèm Accept-Language: en để nhận tiếng Anh. Khi xử lý trong chương trình, luôn dùng error.code cố định bằng tiếng Anh.
Cấu trúc phản hồi
Thành công trả về {"success": true, "data": …, "meta": …}; thất bại trả về {"success": false, "error": {"code", "message", "errors", "context"}}, trong đó errors là chi tiết theo từng trường. Ngoại lệ duy nhất là khi không gửi khóa hoặc khóa không hợp lệ: HTTP 401, body là {"message": "Unauthenticated."}.
{
"success": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "…",
"errors": [
{ "code": "TRACKING_IN_USE", "field": "packages.0.tracking_no", "message": "…" }
]
}
}
Giới hạn tần suất
Mỗi khóa được gọi 60 lần mỗi phút và 5,000 lần mỗi ngày (gói lưu lượng cao: 300 lần mỗi phút và 50,000 lần mỗi ngày); mỗi lần gọi endpoint hàng loạt tính là một lần. Nếu cần dữ liệu theo thời gian thực, hãy đăng ký webhook thay vì gọi thăm dò liên tục (polling).
| Header phản hồi | Mô tả |
|---|---|
X-RateLimit-Limit | Giới hạn mỗi phút |
X-RateLimit-Remaining | Số lần còn lại trong phút này |
X-RateLimit-Limit-DayX-RateLimit-Remaining-Day | Giới hạn và số lần còn lại trong ngày |
Retry-After | Số giây cần chờ trước khi thử lại khi vượt giới hạn |
Tính lũy đẳng (Idempotency-Key)
Yêu cầu ghi có thể kèm header Idempotency-Key (8–128 ký tự, gồm chữ, số và _-:.). Khi mạng bị hết thời gian chờ, gửi lại với cùng key và cùng nội dung sẽ nhận được phản hồi của lần đầu, kèm header Idempotent-Replayed: true; dùng cùng key với nội dung khác sẽ trả về 422. Bản ghi được lưu trong 24 giờ.
Phản hồi hàng loạt
Endpoint hàng loạt trả kết quả cho từng mục: tất cả thành công trả về 200, một phần thất bại trả về 207, tất cả thất bại trả về 422. Mỗi mục đều có index, status (created / updated / failed) và lý do thất bại.
Ký tự dùng cho mã định danh
seller_sku chỉ được dùng chữ, số và ._- (1–64 ký tự); mã vạch sản phẩm được dùng thêm / và + (3–64 ký tự). Không phân biệt chữ hoa và chữ thường.
4 SKU sản phẩm
SKU dùng seller_sku của bạn làm khóa duy nhất: gửi lại cùng một seller_sku nghĩa là cập nhật, và chỉ những trường được gửi mới bị thay đổi.
Tạo hoặc cập nhật SKU hàng loạt
POST/api/v1/merchant/skus/batch
Tối đa 200 mục mỗi lần. Mỗi mục được xử lý độc lập, một mục thất bại không ảnh hưởng đến các mục khác.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
seller_sku | string | Bắt buộc | Mã SKU của bạn, ví dụ SKU phân loại hàng trên Shopee. |
product_name | string | Bắt buộc khi tạo mới | Tên sản phẩm. Các SKU cùng tên sẽ được nhóm vào cùng một sản phẩm. |
barcode | string | Tùy chọn | Mã vạch sản phẩm; kho sẽ in nhãn theo mã này và quét khi lên kệ. Mỗi màu sắc, kích cỡ phải có mã khác nhau. Nếu không có mã vạch có thể để trống, hệ thống sẽ tạo mã vạch hệ thống. Nếu dài hơn 16 ký tự, nhãn sẽ in mã vạch hệ thống thay thế. |
gtin | string | Tùy chọn | GTIN (mã vạch quốc tế, 8 / 12 / 13 / 14 chữ số, có xác thực chữ số kiểm tra). Với sản phẩm Shopee “không có GTIN”, gửi 00. |
spec | object | Tùy chọn | Quy cách, ví dụ {"color": "đen", "size": "M"}, tối đa 5 mục. |
declared_name_zhdeclared_name_en | string | Tùy chọn | Tên hàng khai báo (tiếng Trung / tiếng Anh). Hãy ghi rõ chất liệu và công dụng, không ghi “hàng mẫu” hay “quà tặng”. |
declared_unit_value | number | Tùy chọn | Đơn giá khai báo, là đơn giá bạn mua từ nhà cung cấp, không phải giá bán trên sàn. |
declared_currency | string | Tùy chọn | CNY, TWD hoặc USD; bắt buộc nếu đã điền đơn giá. |
hs_code | string | Tùy chọn | Mã phân loại hàng hóa 11 chữ số; hệ thống dựa vào mã này để đối chiếu quy định nhập khẩu. |
origin_country | string | Tùy chọn | Mã ISO của nước xuất xứ, mặc định CN. |
weight_g | integer | Tùy chọn | Trọng lượng mỗi sản phẩm (gam). |
dimensions_cm | array | Tùy chọn | Dài, rộng, cao (cm), ví dụ [20, 15, 3]. |
battery_type | string | Tùy chọn | none, contained (pin lắp sẵn), packed (pin đóng gói kèm), standalone (pin rời). |
channels | array | Tùy chọn | Liên kết sản phẩm trên sàn, tối đa 20 bộ: platform (shopee / coupang / momo / other), shop_id, item_id, model_id, platform_sku. |
Ví dụ về yêu cầu (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" } ] } ] }'
Phản hồi 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 } }
}
Xác định quy định nhập khẩu (regulation.status)
| ok | Không có mã quy định nhập khẩu. |
| review_required | Quy định chỉ áp dụng cho một phần sản phẩm (ví dụ C02 “một số sản phẩm thuộc mục này phải kiểm tra”), cần xác nhận theo công dụng thực tế của sản phẩm. |
| formal_required | Thuộc diện quy định nhập khẩu (kiểm tra, kiểm dịch, giấy phép, v.v.), không được dùng khai báo đơn giản. |
| blocked | Hàng Trung Quốc đại lục không được phép nhập khẩu (MW0, xuất xứ Trung Quốc đại lục), không thể đăng ký nhập kho trước. |
| unclassified | Chưa cung cấp mã biểu thuế nên chưa thể xác định. |
Tra cứu danh sách SKU
GET/api/v1/merchant/skus
Có thể lọc theo seller_sku, barcode, regulation_status, updated_since (ISO 8601), phân trang bằng page / per_page (tối đa 100).
Lấy một SKU
GET/api/v1/merchant/skus/{seller_sku}
Cập nhật liên kết sản phẩm trên sàn
PUT/api/v1/merchant/skus/{seller_sku}/channels
Thay thế toàn bộ liên kết hiện có bằng danh sách được gửi. Cùng một phân loại sản phẩm trên sàn không thể liên kết đồng thời với hai SKU.
Tải nhãn mã vạch sản phẩm
GET/api/v1/merchant/skus/{seller_sku}/label.pdf?qty=10
Trả về tệp PDF nhãn 40×30mm, qty là số nhãn (1–1000). Kho Thâm Quyến in cùng loại nhãn này khi dán mã; dùng chức năng này khi bạn muốn tự dán mã trước khi gửi hàng.
5 Đăng ký nhập kho trước
Sau khi nhà cung cấp gửi hàng, hãy đăng ký trước mã vận đơn và hàng bên trong. Một phiếu nhập kho có thể có nhiều mã vận đơn, dưới mỗi mã vận đơn liệt kê SKU và số lượng.
Tạo phiếu nhập kho
POST/api/v1/merchant/inbound-orders
Xác thực toàn bộ phiếu: chỉ cần có một lỗi thì phiếu sẽ không được tạo. Tại một thời điểm, mỗi mã vận đơn chỉ được thuộc một phiếu nhập kho đang xử lý; SKU trùng lặp trong cùng một kiện hàng sẽ được cộng gộp số lượng.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
reference_no | string | Bắt buộc | Mã đơn mua hàng hoặc mã phiếu nhập kho của bạn, là duy nhất trong cùng một người bán (chữ, số và ._-/). |
supplier_order_no | string | Tùy chọn | Mã đơn hàng của nhà cung cấp, ví dụ mã đơn hàng 1688. |
warehouse_code | string | Tùy chọn | Kho nhận hàng, hiện chỉ nhận SZ (kho Thâm Quyến). |
notes | string | Tùy chọn | Ghi chú (tối đa 1,000 ký tự). |
packages | array | Bắt buộc | Danh sách kiện hàng chuyển phát, tối đa 50 kiện. |
packages[].tracking_no | string | Bắt buộc | Mã vận đơn chuyển phát tại Trung Quốc. |
packages[].carrier | string | Tùy chọn | Mã hãng chuyển phát, ví dụ yto, sf. |
packages[].items | array | Bắt buộc | Hàng trong kiện: seller_sku và qty, tổng cộng tối đa 500 dòng cho mỗi phiếu nhập kho. |
Ví dụ về yêu cầu (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 sẽ trả về 409 INBOUND_REFERENCE_EXISTS, trong đó error.context.inbound_order_id chứa id của phiếu nhập kho ban đầu. Để thử lại an toàn, hãy gửi kèm Idempotency-Key.Trạng thái phiếu nhập kho
| created | Đã đăng ký trước, chưa có kiện hàng nào đến kho. |
| partially_arrived | Một phần kiện hàng đã đến kho Thâm Quyến. |
| arrived | Tất cả kiện hàng đã đến kho, đang dán mã và lên kệ. |
| completed | Đã lên kệ toàn bộ, số lượng khớp với đăng ký trước. |
| completed_with_discrepancy | Đã hoàn tất toàn bộ nhưng có thiếu hàng, thừa hàng hoặc hư hỏng. |
| cancelled | Đã hủy. |
Trạng thái kiện hàng
| awaiting_arrival | Đang chờ đến kho. |
| labeling | Đã đến kho, đã tạo phiếu công việc, đang dán mã và lên kệ. |
| received | Đã lên kệ xong. |
| mismatch | Tài khoản sở hữu kiện hàng khi nhập kho không khớp với đăng ký trước của bạn, bộ phận chăm sóc khách hàng đang đối chiếu. |
| cancelled | Đã hủy hoặc bị vô hiệu, mã vận đơn đã được giải phóng. |
Tra cứu phiếu nhập kho
GET/api/v1/merchant/inbound-orders
GET/api/v1/merchant/inbound-orders/{id}
Có thể lọc theo status, reference_no, updated_since. Mỗi kiện hàng trả về số lượng dự kiến, thực nhận, hư hỏng và chênh lệch.
Hủy phiếu nhập kho
POST/api/v1/merchant/inbound-orders/{id}/cancel
Chỉ có thể hủy khi chưa có kiện hàng nào đến kho; sau khi hủy, mã vận đơn có thể được đăng ký trước lại.
6 Tra cứu tồn kho
Tồn kho được tách theo kho: SZ kho Thâm Quyến, TY kho Đào Viên (tồn kho tại kho Đào Viên sẽ mở cùng với tính năng xuất hàng).
Tra cứu tồn kho
GET/api/v1/merchant/inventory?warehouse_code=SZ
Có thể lọc theo warehouse_code và seller_sku[] (tối đa 200 mã).
on_hand | Số lượng trong kho. |
reserved | Số lượng đã được giữ cho đơn hàng. |
available | Số lượng khả dụng = trong kho − đã giữ. |
damaged | Số lượng hư hỏng, không thể xuất hàng. |
Phản hồi 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 }
}
Sổ biến động tồn kho
GET/api/v1/merchant/inventory/movements?after_id=0&limit=200
Bản ghi biến động chỉ thêm, không sửa. Dùng con trỏ after_id để lấy trang tiếp theo (tối đa 500 bản ghi mỗi lần), lưu lại meta.next_after_id trong phản hồi để tiếp tục lấy dữ liệu đối soát.
7 Sự kiện Webhook
Khi sự kiện xảy ra, thông báo được đẩy ngay đến URL của bạn, không cần gọi thăm dò liên tục.
Cách thiết lập
- Thiết lập URL webhook trong trang API của trung tâm thành viên (chỉ chấp nhận https) và hoàn tất xác minh quyền sở hữu: endpoint của bạn phải trả về HTTP 200 với body là
{"challenge": "giá trị nhận được"}. - Gọi
PUT /api/v1/merchant/webhook/eventsđể đăng ký nhận sự kiện người bán. Sau đó, việc đổi URL trong trung tâm thành viên sẽ không xóa đăng ký sự kiện người bán.
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"]}'
Danh sách sự kiện
sku.regulation_flagged | Kết quả xác định quy định nhập khẩu của SKU chuyển thành cần xác nhận, cần khai báo hải quan chính thức hoặc không được phép nhập khẩu. |
inbound.arrived | Kiện hàng đã đến kho Thâm Quyến, phiếu công việc đã được tạo. |
inbound.mismatch | Tài khoản sở hữu kiện hàng khi nhập kho không khớp với đăng ký trước, bộ phận chăm sóc khách hàng đang đối chiếu. |
inbound.received | Kiện hàng đã lên kệ xong, kèm số lượng dự kiến, thực nhận và hư hỏng của từng SKU. |
inbound.discrepancy | Số lượng lên kệ khác với đăng ký trước hoặc có hư hỏng (được gửi cùng lúc với inbound.received). |
inventory.changed | Tồn kho có biến động, kèm tồn kho mới nhất của các SKU bị thay đổi. |
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"
}
}
Xác minh chữ ký
Mỗi lần đẩy đều kèm X-Lucky-Event, X-Lucky-Delivery-Id và X-Lucky-Signature: t=dấu_thời_gian,v1=chữ_ký. Dùng webhook secret của bạn tính HMAC-SHA256 trên “dấu thời gian + . + body gốc”, so sánh với v1, và từ chối dấu thời gian cũ hơn 5 phút. Khi cùng một sự kiện được gửi lại, delivery_id không đổi, có thể dùng để loại bỏ trùng lặp.
Phản hồi không phải 2xx sẽ được thử lại sau 1 phút, 5 phút, 30 phút, 2 giờ và 6 giờ; nếu thất bại liên tiếp 20 lần, webhook sẽ tự động bị vô hiệu hóa và cần thiết lập lại trong trung tâm thành viên.
// 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 Mã lỗi
error.code luôn cố định bằng tiếng Anh. Dưới đây là các lỗi thường gặp.
| HTTP | error.code | Mô tả |
|---|---|---|
| 401 | — | Không gửi khóa, khóa không hợp lệ hoặc đã hết hạn (body là {"message": "Unauthenticated."}). |
| 403 | MERCHANT_TOKEN_REQUIRED | Token này không có quyền dùng API Người bán (ví dụ token được tạo khi thành viên thông thường đăng nhập). |
| 403 | MERCHANT_NOT_APPROVEDMERCHANT_SUSPENDED | Tài khoản chưa được phê duyệt là người bán, hoặc người bán đã bị tạm ngưng. |
| 403 | APP_SUSPENDEDAPP_REVOKEDAPP_NOT_FOUND | Ứng dụng API tương ứng với khóa đã bị đình chỉ hoặc thu hồi. |
| 422 | VALIDATION_FAILEDPRODUCT_NAME_REQUIRED | Dữ liệu sai định dạng, xem chi tiết theo từng trường trong error.errors. |
| 422 | BATCH_TOO_LARGE | Số mục trong lần gửi hàng loạt vượt quá giới hạn. |
| 207 / 409 | SKU_BARCODE_DUPLICATESKU_BARCODE_CONFLICT | Mã vạch sản phẩm đã được một SKU khác sử dụng, hoặc trùng với mã vạch hệ thống hay mã lấy hàng của một SKU khác. |
| 207 / 422 | GTIN_INVALIDHS_CODE_NOT_FOUND | Chữ số kiểm tra GTIN không đúng, hoặc mã biểu thuế không tồn tại. |
| 404 / 422 | SKU_NOT_FOUNDSKU_IMPORT_BLOCKED | Không tìm thấy SKU, hoặc SKU thuộc hàng không được phép nhập khẩu nên không thể đăng ký trước. |
| 409 | INBOUND_REFERENCE_EXISTS | Mã tham chiếu của phiếu nhập kho đã tồn tại. |
| 422 | TRACKING_IN_USETRACKING_FORECASTED_BY_OTHERTRACKING_ALREADY_WAREHOUSEDTRACKING_NOT_AVAILABLE | Mã vận đơn đã nằm trong một phiếu nhập kho đang xử lý, đã được thành viên khác đăng ký trước, hoặc đã nhập kho dưới tên thành viên khác. |
| 409 | INBOUND_NOT_CANCELLABLE | Đã có kiện hàng đến kho nên không thể hủy phiếu nhập kho. |
| 400 / 409 / 422 | IDEMPOTENCY_KEY_INVALIDIDEMPOTENCY_IN_PROGRESSIDEMPOTENCY_KEY_REUSED | Idempotency-Key sai định dạng, đã được dùng cho nội dung khác, hoặc yêu cầu trước đó vẫn đang được xử lý. |
| 409 | CONFLICT_RETRY | Cùng một bản ghi đang được một yêu cầu khác sửa đổi, vui lòng gửi lại sau ít phút. |
| 429 | RATE_LIMIT_EXCEEDED | Vượt giới hạn tần suất; hãy chờ theo Retry-After rồi thử lại. |
9 Ví dụ mã nguồn
Hãy chạy các ví dụ dưới đây ở phía máy chủ, không đưa khóa vào mã front-end.
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 Hỗ trợ kỹ thuật
Nếu gặp vấn đề trong quá trình tích hợp, vui lòng cung cấp thời gian gửi yêu cầu, endpoint và error.code để chúng tôi hỗ trợ kiểm tra.
Tài khoản LINE chính thức @0523tw
Email kỹ thuật howyunqisoftware@gmail.com
Phiên bản v1 Giai đoạn 1 (2026-09-17): SKU sản phẩm, đăng ký nhập kho trước, dán mã và lên kệ tại kho Thâm Quyến, tra cứu tồn kho, webhook.