概览
当 Return Helper 系统发生事件时(例如面单生成或退件运货单(Return Shipment)到达仓库),Webhook 会推送异步通知。您的服务器必须暴露一个 HTTPS 端点来接收这些 POST 请求。设置您的 Webhook 端点
端点要求
在提交设置请求之前,请确保您的端点满足以下要求:- 可公开访问 — URL 必须可从互联网访问(不能是 VPN、localhost 或内网地址)
- HTTPS — 端点必须通过 HTTPS 提供服务,并具有有效的 TLS 证书
- 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:
- 将步骤 3 中的
string_to_sign从 Base64 解码 → 字节数组 - 将您的签名密钥从 Base64 解码 → 字节数组
- 使用签名密钥字节对
string_to_sign字节计算 HMAC-SHA256 → 签名字节数组 - 对签名字节数组进行 Base64 编码
eventTime 与您系统时钟的偏差超过 15 分钟,请拒绝该事件(防止重放攻击)。
示例代码
重试机制
以2xx HTTP 状态码响应以确认收到通知。非 2xx 响应将触发重试。连续失败 10 次后,向您端点的通知推送将暂停 24 小时。
通用请求体字段
所有通知请求体共享以下顶级字段:通知事件参考
通知数据结构
面单结果
当退货面单请求完成时(成功或失败)推送。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
顶级数据字段:
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
顶级数据字段:
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
数据包含 returnInventory,结构与库存已创建相同,包含更新后的 returnInventoryMetaList。
metaType 值:
usr— 用户提供的元数据whs— 仓库提供的元数据
RMA 已更新
当仓库更正错误的 RMA 分配时推送。category: notifyUserRmaSwapped / action: notifyUserRmaSwapped
payload 中的关键字段:
SKU 已更新
当卖家更新退货库存(Return Inventory)的 SKU 时推送。category: userUpdateReturnInventorySku / action: userUpdateReturnInventorySku
数据包含 returnRequest 和 returnInventory。
returnRequest 中的关键字段:
returnInventory 对象结构与库存处理完成相同,其中 sku 字段已更新。
行项拆分
当增值服务(VAS)操作将包裹拆分为多个库存时推送。包含每个生成包裹的新行项和库存记录。category: lineItemVasReturnInventoryLineItem / action: splitLineItem
顶级数据字段:
splitLineItemAndReturnInventoryList 中每项包含:
仓库备注已更新
当仓库更新退货申请(Return Request)备注时推送。category: warehouseUpdateWarehouseRemarks / action: warehouseUpdateWarehouseRemarks
数据包含三个对象:
returnRequest— 退货申请(Return Request)(结构与 SKU 已更新 → returnRequest 相同)shipment— 退件运货单(Return Shipment)记录,包含完整地址详情、尺寸、重量、费用和customFieldMapreturnInventory— 受影响的库存(结构与库存处理完成相同),其中warehouseRemarks字段已更新
买家退货面单已生成
当买家在品牌退货门户创建退货且面单生成时推送。仅适用于与 Return Helper 品牌退货服务集成的客户。
category: buyerReturnRrLabel / action: buyerReturnLabelGenerated
检查 buyerReturn.labelRequestStatusCode 的值为 "success" 或 "fail"。
buyerReturn 中的关键字段:
buyerReturnLineItemList 中每项:
Shopify 买家退货已创建
当买家通过 Shopify 集成创建退货申请(Return Request)时推送。category: shopifyBuyerCreateReturn / action: shopifyBuyerCreateReturn
shopifyReturn 中的关键字段:
shopifyReturnLineItemList 中每项:
合并运费已更新
当合并运输订单的运费更新时推送。category: consolidateShippingOrderShippingFeeUpdated / action: consolidateShippingOrderShippingFeeUpdated
order 中的关键字段:
合并运输全部打包
当仓库已将合并订单的所有库存打包入箱时推送。category: consolidateShippingOrderInventoryAllPacked / action: consolidateShippingOrderInventoryAllPacked
order 中的关键字段:
shipmentList 中每项:
boxList 中每项:
consolidateShippingInventoryList 中每项:
合并退件运货单(Return Shipment)已发出
当仓库将合并退件运货单(Return Shipment)发往承运商时推送。category: consolidateShippingShipmentSent / action: consolidateShippingShipmentSent
shipment 中的关键字段:
合并运输 AWB 已更新
当合并退件运货单(Return Shipment)的航空退件运货单(Return Shipment)号更新时推送。category: consolidateShippingShipmentShipped / action: consolidateShippingShipmentShipped
shipment 对象结构与合并退件运货单(Return Shipment)已发出相同,其中 awb 字段已更新。
合并订单已完成
当合并订单中所有退件运货单(Return Shipment)均已发货时推送。category: consolidateShippingOrderCompleted / action: consolidateShippingOrderCompleted
order 对象结构与合并运输全部打包相同,包含完整的 shipmentList(含 boxList 和库存详情)。
合并订单已取消
当仓库强制取消合并运输订单时推送。category: consolidateShippingOrderCancelled / action: consolidateShippingOrderCancelled
order 中的关键字段: