供应链小程序最容易被低估的,不是商品展示,也不是下单页面,而是订单进入后台以后发生的事。
仓库明明已经没货,客户仍能提交订单;货物下午交给了快递,客户第二天看到的还是“待发货”;财务拿着微信支付账单核对,发现后台销售额、退款额和实际资金变化总差一截。遇到这些情况,单独加一个刷新按钮通常没有用。数字可能刷新得更快,几套系统说的却不是同一件事。
红数科技在梳理这类项目时,会先确认一笔订单怎样穿过小程序、订单系统、ERP、仓库、承运方和支付渠道。页面排在后面。只要订单、库存、包裹和资金之间没有稳定的对应关系,系统平时看着能用,一到多仓、拆单、部分退款或月末对账,人工表格就会重新出现。

库存不同步,先查口径,再查接口速度
库存表里写着 100 件,并不表示现在还能卖 100 件。这里面可能有 18 件已经被订单占用,4 件正在质检,3 件是退回仓库但还没有确认完好,另有一批采购在途。前台真正需要的是“此刻还能承诺给客户的数量”,仓库关心的则是每种状态为什么增加、为什么减少。
一套可执行的库存口径,通常会分出现存、已占用、可售、在途和不可售。常规现货业务可以把可售量理解为:合格现货减去订单占用、安全库存和其他冻结数量。允许预售、按箱拆零或临时组套时,公式会变,不能照搬。公式本身不难,麻烦的是商城、ERP 和 WMS 都显示“可用库存”,三边定义却不一样。
所以项目开始时要先定数据归属:SKU 和单位由哪套系统建立,库位实物数量由谁维护,订单占用由谁产生,退货在什么节点重新成为可售库存。企业已有 WMS 时,实物出入库一般以 WMS 为准;没有独立 WMS,ERP 也可能承担库存底账。小程序适合展示和发起业务,不宜再维护一份可以被运营随手改动的“独立库存”。

同步方式也不能只剩“实时接口”四个字。下单时先锁库存,支付或授信审核通过后转成正式占用,订单超时、关闭或审核拒绝后释放;仓库出库时再按实际商品和数量扣减。B2B 业务如果要经过报价确认、信用审批或人工审单,锁库节点可能比零售订单更晚,规则要跟真实履约承诺一致。
每次占用、释放、出库和退回都应有业务单号,并带上 SKU、仓库、数量、发生时间和原因。同一个支付通知或出库通知重复到达,系统只能处理一次;两笔订单同时争抢最后一件库存时,也不能都读到“还有 1 件”然后各自成交。常见做法是使用唯一业务键、库存版本或数据库条件更新控制并发,再把结果写入库存流水。
实时消息负责让各系统尽快看到变化,定时核对负责发现漏掉的消息。两者缺一不可。接口会超时,消息可能晚到,系统也会短暂停机。每天按“SKU + 仓库”比较库存余额,再抽查流水累计是否能还原余额,出现差异就生成待处理记录,比悄悄把一边的数字覆盖到另一边更可靠。覆盖以后数字暂时一样了,差异从哪里来却再也查不到。
一张订单发出去以后,至少会出现三种状态
订单状态、仓库作业状态和物流路由状态,经常被挤进同一个“发货状态”字段。于是 WMS 一点“出库完成”,客户页面就显示“运输中”;快递还没有揽收,客服已经无法判断货到底放在仓库门口,还是确实交给了承运方。
这三层状态应当分开保存:订单层说明整张订单是否待履约、部分发货、全部发货或已完成;包裹层记录这次发出了哪些订单明细、各多少件;物流层保存承运方返回的揽收、运输、派送、签收和异常事件。客户页面可以把它们翻译成较少、容易理解的状态,但后台不能因此丢掉原始记录。
一单多包裹尤其要单独建包裹。每个包裹至少要对应订单明细和数量、发货仓、承运方、运单号、出库时间与交接时间。两个仓库分别发货,先到的包裹不能把整张订单提前改成“已完成”;第二次录入运单号,也不能覆盖第一次发货。合单发货同样要保留一个包裹与多张订单之间的关系,否则其中一单退款或客户查询时,很难说清这个运单装了什么。

承运方的状态名称并不完全一致。系统可以把不同接口返回映射成内部统一状态,但应保留原始状态码、原始描述、物流实际发生时间和本系统收到消息的时间。后两项不是一回事:一条“已揽收”事件可能晚上才同步进来,若只保存接收时间,发货时效分析就会失真。
接口失败时也不要让仓库反复点发货。先把已经确认的出库动作和待回传任务记下来,由后台重试;超过约定时间仍失败,再进入人工待办。页面应如实显示“物流信息待回传”或“回传失败”,不能把技术接口成功当成货物已经揽收,也不能因为外部接口暂时不可用,让仓库重新生成一张出库单。
特定类型的小程序还要处理微信平台侧的发货信息管理。微信开放文档目前明确提供发货信息录入、合单发货和订单发货状态查询等能力,并说明相关类型的小程序需要完成发货信息录入及确认收货流程后再进行资金结算。这里记录的是平台要求的发货信息,它不能替代企业自己的 OMS 或 WMS。更稳妥的做法是实际出库后生成回传任务,保存平台返回结果,再定时查询两边状态是否一致。
对账不是把三个总数凑成相等
财务对账时只比较“后台销售额”和“银行到账”,差异几乎一定会出现。优惠分摊、部分退款、手续费、跨日支付、结算周期以及不同资金账户,都会让两个总数暂时不一致。真正需要核的是单据关系,而不只是最后一个合计数。
一笔交易至少要能顺着下面这些编号查回来:
| 要核对的账 | 关键记录 | 主要核对内容 |
|---|---|---|
| 业务订单 | 订单号、订单明细、应付金额、优惠、运费、订单状态 | 客户实际买了什么,业务上应收多少 |
| 支付退款 | 商户订单号、微信支付订单号、商户退款单号、支付与退款状态 | 是否真正支付,退了几次,每次退多少 |
| 库存履约 | 锁库单、出库单、退货入库单、包裹和运单号 | 发了哪些 SKU,库存为什么变化 |
| 资金流水 | 交易账单、资金账单、手续费及资金账户变化 | 渠道记录与企业资金变化能否对应 |
微信支付当前分别提供交易账单和资金账单申请接口。交易账单适合核支付、退款等交易记录,资金账单用来核资金账户的收支变化;两类账单解决的问题不同,不能只下载其中一张再推算全部差异。现行接口文档还注明,账单仅支持申请三个月内的数据,因此企业应按日下载、校验并归档,不能等到季度末才临时补取。

实际对账可以每天跑一次。系统先按商户订单号和支付订单号匹配,再核金额、状态和时间;部分退款继续向下匹配每个退款单号。没有匹配上的记录不要混在一张“其他差异”表里,而应分清是支付渠道有记录、业务订单缺失,还是业务订单显示已支付但渠道查不到,或退款金额、手续费、资金账户、跨日归属存在差异。
能自动确认的差异由程序补查。比如支付回调暂时没有到,可以调用查询接口确认;重复通知则按同一业务键忽略重复处理。微信支付的回调文档也明确提醒,商户系统必须能够正确处理重复通知。
需要人工判断的差异进入专门的异常单,保留原值、渠道值、处理意见、操作人和处理时间。财务人员不应直接把订单状态改成“已对平”,技术人员也不应删除一条异常记录来让报表恢复绿色。
退款与退货还要分开。退款成功表示资金结果成立,不代表退回商品已经过质检,更不代表库存可以立即恢复可售。已发货订单发生部分退货时,支付退款单、售后单、退货入库单和库存状态分别推进,最后再由订单说明哪些商品已经结束履约。把“退款成功”直接绑定“库存加回”,很容易把尚未收到或已经破损的商品重新卖出去。
后台要让日常人员查得到,不必每次翻接口日志
客服拿到一个订单号,应该能看到支付是否确认、库存锁在哪个仓、分成几个包裹、最近一条物流事件是什么、是否发生退款以及对账有没有异常。仓库按运单号也应能反查订单和商品。财务从账单中的微信支付订单号出发,可以回到业务订单和退款记录。
这类查询页面不需要把所有技术字段都铺开,却要保存关键快照。客户下单时的收货地址、商品名称、规格、单价和优惠规则不能跟着主数据后来修改;库存、发货和金额的人工调整要记录前后值、原因和人员。否则过两个月再处理售后,后台显示的已经不是客户成交时看到的内容。
如果小程序属于《电子商务法》第三十一条所称的电子商务平台经营者,平台上发布的商品和服务信息、交易信息应当确保完整性、保密性和可用性,并自交易完成之日起保存不少于三年;其他法律、行政法规另有规定的,从其规定。企业还应结合自身经营者身份、会计档案、税务和所属行业要求确定更具体的保存期限,不能简单把接口日志保留天数当成全部合规期限。
权限也要落到岗位。仓库可以确认拣货、出库和交接,不应修改支付金额;客服能发起售后,不一定拥有最终退款审批权;财务处理差异,不直接补库存。紧急情况下允许人工修正,但修正应通过正式单据完成,并保留审批和操作记录。
上线前,拿异常订单把整条链路走一遍
正常下一单、正常发一次货,只能证明最顺的路径接通了。下面这些情况更能暴露系统是否真的可用:
| 测试情况 | 应当看到的结果 |
|---|---|
| 两个客户同时购买最后一件商品 | 只有一笔订单成功占用;另一笔得到明确的缺货结果,不出现负库存 |
| 订单锁库后超时未支付 | 订单关闭后只释放一次库存,商品重新可售 |
| 支付通知重复或延迟 | 订单最终能经查询确认,库存与发货任务都不会重复生成 |
| 一张订单从两个仓库分开发货 | 两个包裹分别记录商品和数量,整单在全部发完前保持部分发货 |
| 运单号已录入但承运方尚未揽收 | 后台区分已出库与已揽收,客户页面不虚报运输进度 |
| 已发货商品发生部分退款、退货 | 退款、退货入库和可售库存分别按真实节点更新 |
| 支付发生在日切附近,次日又退款 | 业务日期、支付时间、账单日期和退款日期都保留,对账差异能跨日追踪 |
| 外部接口短时不可用 | 本地业务单据不丢失,任务可以重试,超时后有人收到待办或告警 |
测试完成后,最好能留下四样交付物:一份字段与库存口径说明,一张订单和包裹状态流转图,一套编号及幂等规则,一张异常由谁处理的责任表。它们比“已完成接口联调”更有用,因为仓库、客服和财务以后真的要靠这些内容工作。
供应链小程序做到什么程度才算稳,不取决于页面能显示多少状态。关掉其中一个外部接口、重复发送一次通知、拆开一个包裹、跨一天退一部分款,订单仍能回到准确结果,差异也能查到原因,这套系统才接近可以长期运行。
资料核验
以下公开资料核验于 2026 年 7 月 24 日。平台接口和运营要求可能继续调整,正式接入时应以对应商户类型、交易场景及平台届时公开的文档为准。