ENGINEERING NOTE 30 / 50 · CARD
安全处理乱序卡片事件
Webhook到达顺序不等于交易时间线。持久化事件,并在必要时用标识、版本和权威查询核对状态。
本文由 OPEN RAMBO 发布。工程方案和伪代码用于说明设计,不是现有产品 API 文档;示例数字均为演示。
分离接收与应用
验证事件并持久保存后再确认接收。工作器以幂等方式应用业务影响。确认后处理失败,持久队列仍可恢复。
不要倒退状态
迟到授权不能抹掉已清算交易。按事件语义设计迁移,而非只按最后写入时间。退款先于原扣款到达时先待核对,不虚构原交易。
有控制地重放
重放工具限定安全事件引用和时间窗。可重建派生视图,但不能重复资金流水。记录操作人原因,并比较重放前后总额。
示意流程
if event_id_already_seen(event.id): return existing_result
persist(event)
apply_if_transition_is_valid(event)
# Unresolved dependencies enter reconciliation.如何验收
将同一乱序事件集重放两次,两次最终账本与用户状态应相同。