神慧
Mon Jun 22 2026 08:00:00 GMT+0800 (China Standard Time)·6 min readERP

跨境 ERP:多店铺订单与库存如何同步不打架

Webhook 推送、拉取补偿与库存扣减,三件事必须共享同一套真相。

#跨境ERP#库存#Shopify#同步

跨境 ERP 最容易翻车的点,不是商品编辑页做得漂不漂亮,而是多店铺、多平台同时卖同一 SKU 时库存数字是否一致。商家在 Shopify 改了一处库存,Amazon 侧仍显示可售,仓管按 ERP 拣货却超卖——这类事故往往来自「每个渠道各写各的库」,缺少统一的同步入口与扣减规则。

同步入口要收敛

所有渠道 Webhook(订单创建、取消、退款、库存变更)进入统一同步队列,按 店铺 ID + 资源类型 分区消费。Worker 只认内部领域事件,不认平台原始 JSON scattered 在业务代码里。禁止为某个平台单独开「直接 UPDATE inventory 表」的旁路。

消息幂等

Webhook 会重复投递。用 平台 + 事件 ID订单号 + 事件类型 做去重表,已处理过的直接 ACK。去重记录保留足够长窗口,覆盖平台重试周期。

顺序与延迟

同一订单的多条事件(创建 → 支付 → 取消)可能乱序到达。消费时带版本号或时间戳,旧事件不能覆盖新状态。无法判断时进入「待对齐」队列,由对账任务或人工确认。

库存扣减规则

以本地「可售库存」为权威,渠道库存为投影。下单占用、发货扣减、取消释放,都在本地事务或带版本号的乐观锁里完成;渠道侧只做数量推送与差异告警,不回写覆盖本地权威值。

扣减顺序

同一 SKU 多仓时,扣减策略(就近仓、优先级仓)在 ERP 内可配置且可审计。调拨在途、冻结库存要在商家界面可见,避免运营误以为「还有货」。

对账补洞

推送会丢、会延迟。定时任务拉取各平台最近变更的订单与库存快照,与本地流水比对。发现「平台已售本地未扣」或「本地已扣平台仍显示可售」,进入差异队列,支持规则自动修复与人工复核。

典型坑

  • Webhook 与定时拉取双写无协调:共享同一套幂等键
  • 把「渠道库存」当真相源做盘点:盘点以本地实物为准,再向渠道推送校正
  • 大促队列堆积仍同步推送:优先保证本地扣减,渠道投影允许短暂延迟并监控滞后

运营可见性

商家需要看到:某 SKU 在各平台的可售数、在途占用、最近同步时间与最后错误原因。错误应可分类(鉴权失败、限流、映射缺失),方便一线客服解释,而不是统一「同步失败请稍后再试」。

组合 SKU 与捆绑销售

Bundle、变体、多渠道 SKU 映射是超卖高发区。ERP 内维护「渠道 SKU → 本地 SKU / 组件清单」映射表,扣减时展开到组件层。映射缺失时不应默认扣减成功,而应阻塞并告警,避免 silent wrong deduction。

上线前检查清单

  • [ ] 单 SKU 多渠道扣减可逐笔追溯
  • [ ] Webhook 重复投递不会重复扣减
  • [ ] 定时对账能产出可行动的差异清单
  • [ ] 渠道 API 限流有退避与告警
  • [ ] Bundle 与变体映射缺失会阻断而非误扣

大促前建议做一次「影子对账」:不改动渠道,只比对本地投影与平台快照,提前发现映射错误与 Worker 积压。差异结果应能指派到具体店铺与 SKU,方便运营跟进而不是只看汇总数字。ERP 的价值是让商家少切后台;底线是库存数字经得起仓管盘点和平台抽检。实时流负责快,对账任务负责对——时间尺度不同,哲学相同。

小结

库存同步的权威应落在本地可售库存,渠道侧做投影与告警。事件乱序、捆绑商品映射与影子对账是长期痛点,需要在架构里预留位置。定期盘点差异比追求「实时绝对一致」的口号更务实。