批次寫入組合商品

View as Markdown
一次寫入多筆組合商品,逐筆各自新增、更新或去重,規則與單筆端點相同,互不影響。送出空陣列或沒有 body 會在受理前被拒絕,回傳 400 empty_batch;已受理的請求一律回傳 HTTP 200,逐筆的處理結果放在回應 body 的 items 裡(見 BundleBatchUpsertResult、BundleBatchItemResult),單筆失敗不會讓其他筆一起失敗。⚠️ 這支端點使用專屬的回應信封,不是客戶、商品、規格家族共用的那一份:每一筆除了商品序號(id)之外,還會多回一個唯讀的 skuId——組合商品的價格查詢是用商品序號定位(見「組合商品價格」),skuId 純粹是給你端核對用的關聯鍵。逐筆狀態是 created、updated、failed,語意與其他新增更新型端點相同。

Authentication

X-Signaturestring

每個 /v1 請求都必須帶 X-Client-Id、X-Timestamp、X-Nonce 與 X-Signature 四個標頭。X-Signature 是以 client secret 對 canonical string 做 HMAC-SHA256 後的 Base64。canonical string 的組成、可複製的簽章範例與 401 排查步驟,請參閱「驗證與簽章」。

Request

This endpoint expects a list of objects.
idlong or nullOptional

組合商品序號(商品序號)。帶 id 時一律視為更新該筆,不會再比對 outerSysCode;省略時改依 outerSysCode 判斷新增或更新。PUT /v1/bundles/{id} 會忽略這裡的值,一律以路徑上的 id 為準。

outerSysCodestring or nullOptional

ERP 端的組合商品代碼,用來與既有組合商品比對、去重。新增時省略視為空字串;更新時省略保留現有值。長度上限 50 字元,超過回傳 400 outer_sys_code_too_long。

namestring or nullOptional

組合商品名稱。新增時省略視為空字串;更新時省略保留現有值。長度上限 100 字元,超過回傳 400 name_too_long。

productCategoryIdlong or nullOptional

商品分類序號,必須是可指派的(子)分類 id。新增時必填,省略回傳 400 product_category_id_required;帶了但分類不存在、不可指派或屬於其他租戶,回傳 400 invalid_product_category_id。更新時省略會保留目前的分類;若有帶值,會依相同規則重新驗證。

unitstring or nullOptional

商品單位。新增時省略視為空字串;更新時省略保留現有值。長度上限 50 字元,超過回傳 400 unit_too_long。

specstring or nullOptional

規格內容。新增時省略視為空字串;更新時省略保留現有值。長度上限 100 字元,超過回傳 400 spec_too_long。

barcodestring or nullOptional

條碼。新增時省略視為空字串;更新時省略保留現有值。長度上限 50 字元,超過回傳 400 barcode_too_long。

warehousestring or nullOptional

倉別。新增時省略視為空字串;更新時省略保留現有值。長度上限 50 字元,超過回傳 400 warehouse_too_long。

pricedouble or nullOptional

牌價。新增時省略視為 0;更新時省略保留現有值。必須介於 0 到 9999999.99,超出範圍回傳 400 invalid_price。

sellPricedouble or nullOptional

對外售價。範圍與省略規則同 price,超出範圍同樣回傳 400 invalid_price。

quantityPrecisioninteger or nullOptional

數量精度(0 為整數,1 至 4 為小數位數)。新增時省略視為 0;更新時省略保留現有值。必須介於 0 到 4,超出範圍回傳 400 invalid_quantity_precision。

componentslist of objects or nullOptional

配方,至少 1 筆;建立時必填,省略或空陣列一律回傳 400 bundle_components_required(建立永遠會送出自己的配方陣列,省略在效果上等同空陣列)。更新時省略(null)即配方維持不變;帶值(包含空陣列)即配方整份替換,替換規則見更新端點的說明,替換整個失敗時完全不套用、原配方保留。

Response

OK
itemslist of objects or nullOptional

逐筆的處理結果,順序與送出的陣列相同,一筆對一筆。

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
500
Internal Server Error