Shopee 集成里,最常见的误会是“拿到 tracking number 就结束”。sale_shopee 明确不是这个模型:tracking 只是中间态,后面还要请求 label、轮询 label 状态、下载最终面单,而且整个过程对 eligible picking 还要分批、按 shop 处理。
主要参考源码:
enterprise/sale_shopee/models/stock_picking.py
一、不是所有 picking 都能立即进入同步
_sync_shopee_pickings() 先把 pickings 按 shop 分组,再筛出当前可同步对象。也就是说,平台履约的起点不是“库存里有一张单”,而是“这张单在当前店铺和当前状态下达到了同步条件”。
二、tracking number 只是后续动作的前提
代码里 _set_tracking_number() 之后,才会把已有 carrier_tracking_ref 的 picking 拿去 _generate_shipping_label()。这说明 tracking 不是终点,而是面单请求的准入条件。
三、label 还是异步的
请求完 label 后,状态可能是 processing。随后 _fetch_shipping_label_status() 再把 ready 的 picking 筛出来,最后 _download_shipping_label() 才真正拿到可打印文件。
这条链天然是异步的:
- tracking 可先到;
- label 请求可先发出;
- label readiness 可能稍后才回来。
四、为什么这里特别容易出现“内部已准备,平台还没准备”
因为 Odoo 内部出库动作和 Shopee 平台 label 状态并不是同一时钟。若团队只看内部单号,就会误以为面单随时可打;若只看平台 label,又可能忽视内部 picking 尚未满足同步条件。
五、结论
Shopee 发货不是“拿到单号就结束”,而是eligible picking -> tracking 回填 -> label 请求 -> 状态轮询 -> label 下载的多段异步链。理解这一点,才不会把平台履约当成同步式的一步操作。
DISCUSSION
评论区