执行真相源 docs/superpowers/plans/2026-07-10-pay-v2-p1-core-model.md(含 - [ ] checkbox)。设计见 pay v2 统一支付网关设计。
:memory: 测试约定、配置驱动账户注册表。即"一单 N 渠道只一个成功 / 可取消 / 多账户路由"的数据层。不含 Provider/收款管线/渠道/退款执行(P2+)。
| 阶段 | 内容 | 状态 |
|---|---|---|
| P1 | 核心模型(Order/Attempt/Account/Refund)+ money + 状态机 + 测试约定 + 账户配置注册表 | 本页 |
| P2 | Provider 抽象 + 一次性收款管线 + webhook v2(event_type)+ 幂等/金额核对(fake provider 测) | 待细化 |
| P3 | 首批渠道 adapter:crypto 自托管 / 支付宝 / Stripe | 待细化 |
| P4 | 退款:POST /refunds + 三向(业务/crypto 人工/平台通知)+ refund 事件 | 待细化 |
| P5 | 多账户路由策略(round_robin/weighted/limit_aware/crypto 地址池) | 待细化 |
| P6 | 对账 job(每 provider query,渠道流水 vs 本地订单) | 待细化 |
| P7 | codes 共享库(A 嵌入各产品) | 待细化 |
| P8 | later:订阅/recurring(4 类 kind)、拒付 chargeback | 待细化 |
Parse/Format 往返,超精度报错。禁 float / string 元(v2 破坏性改动)。UNIQUE(channel,provider_ref))、三套状态枚举、接进 AutoMigrate;建 OpenTestDB 的 :memory: sqlite 测试约定(pay 原无 DB 测试)。config.accounts 声明账户(channel/weight/enabled/limit/region/subject),凭证只存 env 前缀、真值运行时从 env 取;EnabledFor(channel,region) 筛选(路由策略在 P5)。| 约束 | 说明 |
|---|---|
| 金额 | int64 最小单位 + 币种码,禁 float / string 元 |
| 幂等 | 条件 UPDATE + RowsAffected(sqlite 单写,无 FOR UPDATE) |
| 迁移 | GORM AutoMigrate,无手写 migration;内嵌 Base |
| 凭证 | json:"-" + env 注入,不入库/配置明文 |
| 重设计 | jiu 未上线、无生产数据,可重建表 |
相关:pay v2 设计 · 真相源 docs/superpowers/plans/2026-07-10-pay-v2-p1-core-model.md