概覽
當 Return Helper 系統中發生事件時(例如標籤生成或退件運貨單(Return Shipment)抵達倉庫),Webhooks 會傳遞非同步通知。您的伺服器必須公開一個 HTTPS 端點以接收這些 POST 請求。設定您的 Webhook 端點
端點要求
在提交設定請求前,請確保您的端點符合以下要求:- 可公開存取 — URL 必須可從網際網路存取(不可使用 VPN、localhost 或僅限內部存取的位址)
- HTTPS — 端點必須使用具有有效 TLS 憑證的 HTTPS
- HTTP POST — 端點必須接受含
application/json主體的POST請求 - 回應 HTTP 200 — 您的伺服器在收到請求後必須迅速回傳
200 OK狀態;任何其他狀態碼或逾時均視為傳遞失敗 - 快速回應 — 如有需要請以非同步方式處理事件;請勿在回應前執行繁重的作業,以避免傳遞逾時
註冊您的端點
如需註冊 Webhook 端點,請填寫 Webhook 設定申請表。此表單包含我們完成設定所需的所有資訊,是啟用端點最快速的方式。我們建議使用上方的表單,因為它可確保一次性收集所有必要資訊。若您無法使用表單,也可以透過電子郵件提出申請——請參閱下方範本。
電子郵件範本(若您無法使用表單)
電子郵件範本(若您無法使用表單)
若您偏好透過電子郵件聯絡,請將以下內容發送至 support@returnhelper.com:
事件傳遞
時間 — 事件可能在觸發動作後幾秒鐘抵達,在極少數情況下可能延遲至幾分鐘後。 重複事件 — 您的端點可能收到相同事件超過一次。請追蹤已處理的notificationId 進行去重;notificationId 在每次推送中均為唯一且必定存在,因此可單獨作為穩定的等冪鍵使用。
事件順序 — 不保證傳遞順序。請將您的處理器設計為可以任意順序處理事件。例如,inventoryCreated 可能在 warehouseMarkShipmentArrivedV2 之前抵達。請使用 API 取得您收到的亂序事件中所參考的任何物件。
每個事件均包含 ISO 8601 格式的 eventTime 欄位。
通知標頭
每個 Webhook 請求均包含以下標頭:舊版標頭
以下標頭仍會隨每則通知送出,且不會被移除。新的整合請改為讀取上方的標頭。HTTP 標頭名稱不區分大小寫,部分框架會將其正規化。上表為 Return Helper 實際送出的大小寫形式;若您的框架會將傳入的標頭名稱轉為小寫,請以不區分大小寫的方式比對。
簽章驗證
您的簽署金鑰由 Return Helper 提供(已進行 Base64 編碼)。請妥善保管並切勿暴露。您可以在使用者入口網站中與 API Key 和 Token 相同的畫面找到它——請參閱 認證 一節中的截圖;也可以使用取得 Signing Key以程式方式讀取。操作範例
以下為收到的請求範例: 標頭:逐步驗證說明
步驟 1 — 從ReturnHelper-Signature 標頭中提取簽章(用於最後比對):
RETURNHELPER-TRIGGERED-AT 標頭中提取時間戳記:
string_to_sign
依序串接以下四個值(無分隔符):
- HTTP 方法:
POST - 您的通知端點 URL:
https://s2024-01-12.free.beeceptor.com - 步驟 2 取得的
RETURNHELPER-TRIGGERED-AT值 - 原始 JSON 主體
string_to_sign:
- 將
string_to_sign(步驟 3)從 Base64 解碼 → 位元組陣列 - 將您的簽署金鑰從 Base64 解碼 → 位元組陣列
- 使用簽署金鑰位元組對
string_to_sign位元組計算 HMAC-SHA256 → 簽章位元組陣列 - 將簽章位元組陣列進行 Base64 編碼
eventTime 與您系統時鐘相差超過 15 分鐘的事件(重放攻擊防護)。
範例程式碼
重試機制
請以2xx HTTP 狀態碼回應以確認已收到。非 2xx 回應將觸發重試。連續 10 次失敗後,傳遞至您端點的通知將暫停 24 小時。
通知主體公共欄位
所有通知主體共享以下頂層欄位:通知事件參考
通知 Payload
標籤結果
當退貨標籤請求完成時發送(成功或失敗)。category: labelGenerated / action: labelGenerated
label 中的關鍵欄位:
成功範例:
倉庫退件運貨單(Return Shipment)抵達(v2)
當倉庫標記退件運貨單(Return Shipment)已收到時發送。此後必定跟隨一個或多個庫存已建立事件。此事件會回傳您的
sellerReferenceNumber,是您的訂單紀錄與 Return Helper 識別碼之間的主要對帳點。預設的 V202207 會在一份打包負載中攜帶三個層級的 SRN;V202407 僅攜帶 Shipment 層級的 SRN。完整的對帳工作流與版本差異見 Seller Reference Number。category: rsl / action: markShipmentArrive / version: 202407
shipment 中的關鍵欄位:
庫存已建立
在退件運貨單(Return Shipment)收到後(或 VAS 拆分後)發送,通知已建立新的退貨庫存(Return Inventory)記錄。每筆庫存品項發送一個事件 — 若在同一標籤下收到多個包裹,同一退件運貨單(Return Shipment)可能產生多個事件。此負載中沒有
sellerReferenceNumber。 returnInventory 與 shipment 都不攜帶 sellerReferenceNumber;只有 shipment.referenceNumber 存在,而該欄位回傳的是您傳入的 orderNumber——並非賣家參考號。如果您依賴 sellerReferenceNumber 將庫存與您自己的紀錄對帳,請不要只訂閱 newInventoryCreated。請同時訂閱 Warehouse Shipment Arrived(V202207 下在三個層級都攜帶 SRN)或 Inventory Handling Complete(在 returnInventory.sellerReferenceNumber 上攜帶 Line Item 層級的 SRN)。完整的對帳策略見 Seller Reference Number。category: newInventoryCreated / action: newInventoryCreated
returnInventory 中的關鍵欄位:
圖片已更新
當退貨庫存(Return Inventory)明細品項的圖片被新增、變更或移除時發送。category: rrli / action: changeLineItemImage
頂層 Payload 欄位:
returnRequestLineItem 中的關鍵欄位:
imageUrlList 中的 URL 可公開存取、不會過期,可在用戶端安全快取。請直接保存使用。空狀態:imageUrlList: []。
未知來件(Unknown Shipment)已指派
當沒有先前退貨申請(Return Request)的退件運貨單(Return Shipment)被識別並指派給賣家時發送。category: rsl / action: assignUnknown / version: 202407
returnInventory 中的關鍵欄位:
unknownShipment 中的關鍵欄位:
回收狀態更新
當回收追蹤號碼更新或取件狀態變更時發送。category: recall / action: recallUpdateStatus
recallUpdateTypeStatus 值:
重寄狀態更新
當重寄追蹤號碼更新,或重寄完成或失敗時發送。category: resend / action: updateResendStatus
頂層 Payload 欄位:
resend 中的關鍵欄位:
每筆
resendShipmentList 項目中的關鍵欄位:
resendShipmentList 總是只有一筆項目——一筆重寄有且僅有一張重寄運貨單。請直接讀取 resendShipmentList[0]。resend.resendStatusCode:
3— 已完成(讀取resendShipmentList[0].trackingNumber)4— 失敗(讀取resendShipmentList[0].error)
resendShipmentList[0].sellerReferenceNumber 將事件對應到您自己的訂單紀錄,就不必儲存 Return Helper 的 resendId。
只有當補寄是由 Enterprise 帳戶透過 以 SKU 建立 Resend 建立、且有提供參考編號時,
sellerReferenceNumber 才會有值;其餘補寄一律為 null。若要以該值即時查詢補寄,請使用 以 Seller Reference Number 搜尋 Resend。VAS 更新
當增值服務(VAS)完成時發送。category: rrliv / action: vasUpdated
updateVasList 中的每個品項:
imageUrlList 中的 URL 可公開存取、不會過期,可在用戶端安全快取。請直接保存使用。空狀態:imageUrlList: [](某些 VAS 類型不產生圖片;這些項目仍出現在 updateVasList[] 中,但 imageUrlList 為空陣列)。
庫存處理完成
當倉庫完成處理指示(丟棄、重寄、回收等)時發送。category: rinv / action: completeInventoryHandling
returnInventory 中的關鍵欄位:
handlingCode 值:
handlingStatusCode 值:
庫存重新校準
當倉庫更新退貨庫存(Return Inventory)的測量尺寸或重量時發送。category: completeRecalibrate / action: completeRecalibrate
recalibrateSupplement 中的關鍵欄位:
庫存中繼資料已更新
當倉庫或使用者新增或更新退貨庫存(Return Inventory)的中繼資料時發送。category: updateReturnInventoryMeta / action: updateReturnInventoryMeta
Payload 包含與庫存已建立相同結構的 returnInventory,其中包含更新後的 returnInventoryMetaList。
metaType 值:
usr— 使用者提供的中繼資料whs— 倉庫提供的中繼資料
RMA 已更新
當倉庫更正不正確的 RMA 指派時發送。category: notifyUserRmaSwapped / action: notifyUserRmaSwapped
payload 中的關鍵欄位:
SKU 已更新
當賣家更新退貨庫存(Return Inventory)的 SKU 時發送。category: userUpdateReturnInventorySku / action: userUpdateReturnInventorySku
Payload 包含 returnRequest 和 returnInventory。
returnRequest 中的關鍵欄位:
returnInventory 物件遵循與庫存處理完成相同的結構,包含更新後的 sku 欄位。
明細品項拆分
當 VAS 操作將包裹拆分為多個庫存時發送。包含每個產生的包裹的新明細品項和庫存記錄。category: lineItemVasReturnInventoryLineItem / action: splitLineItem
頂層 Payload 欄位:
splitLineItemAndReturnInventoryList 中的每個品項包含:
倉庫備註已更新
當倉庫更新退貨申請(Return Request)的備註時發送。category: warehouseUpdateWarehouseRemarks / action: warehouseUpdateWarehouseRemarks
Payload 包含三個物件:
returnRequest— 退貨申請(Return Request)(與 SKU 已更新 → returnRequest 結構相同)shipment— 包含完整地址詳情、尺寸、重量、費用及customFieldMap的退件運貨單(Return Shipment)記錄returnInventory— 受影響的庫存(與庫存處理完成結構相同),包含更新後的warehouseRemarks欄位
買家退貨標籤已生成
當買家在品牌退貨入口網站建立退貨且標籤已生成時發送。僅適用於整合了 Return Helper 品牌退貨服務的客戶。
category: buyerReturnRrLabel / action: buyerReturnLabelGenerated
請檢查 buyerReturn.labelRequestStatusCode 是否為 "success" 或 "fail"。
buyerReturn 中的關鍵欄位:
buyerReturnLineItemList 中的每個品項:
Shopify 買家退貨已建立
當買家透過 Shopify 整合建立退貨申請(Return Request)時發送。category: shopifyBuyerCreateReturn / action: shopifyBuyerCreateReturn
shopifyReturn 中的關鍵欄位:
shopifyReturnLineItemList 中的每個品項:
合併退件運貨單(Return Shipment)費用已更新
當合併退件運貨單(Return Shipment)訂單的運送費用更新時發送。category: consolidateShippingOrderShippingFeeUpdated / action: consolidateShippingOrderShippingFeeUpdated
order 中的關鍵欄位:
合併退件運貨單(Return Shipment)全部已打包
當倉庫已將合併訂單的所有庫存打包入箱時發送。category: consolidateShippingOrderInventoryAllPacked / action: consolidateShippingOrderInventoryAllPacked
order 中的關鍵欄位:
shipmentList 中的每個品項:
boxList 中的每個品項:
consolidateShippingInventoryList 中的每個品項:
合併退件運貨單(Return Shipment)已寄出
當倉庫將合併退件運貨單(Return Shipment)派送至承運商時發送。category: consolidateShippingShipmentSent / action: consolidateShippingShipmentSent
shipment 中的關鍵欄位:
合併退件運貨單(Return Shipment) AWB 已更新
當合併退件運貨單(Return Shipment)的航空退件運貨單(Return Shipment)號碼更新時發送。category: consolidateShippingShipmentShipped / action: consolidateShippingShipmentShipped
shipment 物件遵循與合併退件運貨單(Return Shipment)已寄出相同的結構,包含更新後的 awb 欄位。
合併訂單已完成
當合併訂單中所有退件運貨單(Return Shipment)均已寄出時發送。category: consolidateShippingOrderCompleted / action: consolidateShippingOrderCompleted
order 物件遵循與合併退件運貨單(Return Shipment)全部已打包相同的結構,包含完整的 shipmentList(含 boxList 及庫存詳情)。
合併訂單已取消
當倉庫強制取消合併退件運貨單(Return Shipment)訂單時發送。category: consolidateShippingOrderCancelled / action: consolidateShippingOrderCancelled
order 中的關鍵欄位: