feat(payment): 取消订单不再等关单结论,按用户意图立刻生效
真机复测后产品定案:取消是高频操作,而「等一个对账周期」是每次都要付的代价。讨论结论记在
docs/adr/0003 的 2026-09-17 修订里,那里原本就写着这条路——「关单中期间允许直接落成已取消」
的前提是「取消后收到钱能自动退回付款人」,而这个前提在票 05 的悬账自动退款落地后已经成立。
- cancel:查单明确说钱已收下 → 不取消,落成已支付并告知用户(不变,这是「不谎报钱」的底线);
查单说没收款、或通道不可达 → 立刻取消订单并按用户意图返回已取消。
- 关单改成尽力而为:它的结论只决定这次尝试的本地终态(关掉了 → CLOSED,不必再盯;
没关掉 → CLOSING/CANCEL_UNCONFIRMED,由对账继续盯着并继续关),不再挡住取消。
- cancel_requested_at(V151)降级为审计事实,删掉随之失去消费者的
cancelOrdersAwaitingCloseConclusion() 对账扫描:等待态不存在了,留着就是死状态。
- 关单回执说「原交易可能已成功」而查单又查不到时同样立刻取消,PAYMENT_CLOSE_CONFLICT 问题记录
继续留给人工,钱真进来了走悬账退款,人才端订单显示「已退款」。
- 代价明确记账在 ADR 里:偶发「用户付了钱又被自动退回」,要求支付恰好完成在「查单之后、凭证被
关掉之前」那几秒里(多是用户自己在支付途中返回又点取消);多一笔收款+退款流水,手续费大概率
不退。
回归:新增/改写五条(关单处理中即时取消、通道不可达即时取消、取消时间落库、取消后凭证仍被
关掉、已收款订单不可取消),并把「未定局凭证挡住新建」那条改用放弃支付路径触达——取消现在会
直接结束订单,不再能用来构造待支付+CLOSING 的组合。全量 369 项,仅 testing.md 记录的 3 项基线
失败。ADR-0004 里那句「5 分钟一轮」同步改成 1 分钟。