对象:
feature/wechatpay-pay-core全部 26 个 commit(53 文件 +6271/-355),不只本次会话的 7 个
方法:只看代码与真实输出,不采信文档与 commit message
14 个维度过,发现 1 个真缺口 —— 已按长官令补完。
🔴 缺口:机构列表「付款」列前端没做(批 B 遗留,非本次会话引入)
✅ 2026-08-15 已补(commit 470533b8):PC 加第 8 列、手机端胶囊落右下角、
筛选按长官原话零新增框(付款态并入机构状态一组,选中时拆成两路参数下传)。
真打三条筛选路径全通;最终全量 17 failed / 642 passed,与基线逐条一致、0 新增。
434865cf feat(batchB): 机构列表付款状态列 + 独立筛选(方案 §130/§150)
实查该 commit 只动了 2 个文件:
settlement/backend/app/api/settlement/stores.py | 43 ++++++
tests/contract/settlement/test_payment_records.py | 110 +++++
前端一行没动。
| 层 | 状态 |
|---|---|
后端字段 payment_status(已支付/未支付/已退款) |
✅ stores.py:502 compute_payment_status |
后端筛选参数 payment_status |
✅ stores.py:419 / :507 |
| 后端测试 | ✅ 3 条(carries / values / end_to_end)全绿 |
PC 机构列表 admin/minicup/stores/page.tsx |
❌ 0 处引用 |
平台手机端 platform/minicup/stores/page.tsx |
❌ 0 处引用 |
渠道端 channel/minicup/store-progress/page.tsx |
⚠️ 有同名字段,但是旧字段,非批 B 三态 |
后果:运营在机构列表上看不到谁付了钱、也筛不出来——这正是方案 §200
「机构列表(admin/platform):付款独立列 + 筛选」要解决的问题。
为什么测试全绿也没发现:3 条测试全打后端接口,前端有没有渲染它们管不着。
我的理解:展示上加一列,筛选不加框——把用户在「机构状态」多选里选的付款态,
转成后端那个 payment_status 参数传过去。两边就都自洽了。但这是长官多轮纠错过的区域
(F 列改动纪律),我不自己拍。
| # | 维度 | 判据 | 结果 |
|---|---|---|---|
| A | alembic 单头 | alembic heads |
✅ phase68_002 单头,链 000→001→002 完整 |
| B | 合入 test 不会变多头 | 比对两边 versions/ 目录 | ✅ test 上无我缺的迁移 |
| C | 迁移可逆 | 真跑 downgrade 2 级 → upgrade head | ✅ 双向都成功,回到 head |
| D | 新端点鉴权 | 8 个端点无凭证真打 | ✅ 6 个 401;2 个设计公开(notify 靠验签、wx-auth 是授权入口) |
| E | 内部端点守卫 | 不带/带错 X-Service-Token 真打 | ✅ 均 403 |
| F | 回调安全 | 读代码看顺序 | ✅ 验签(:140) → 解密(:160) → 才查库(:167);幂等有专门用例 |
| G | 库层约束 | 直连 PG 查 pg_constraint |
✅ 与迁移声明逐条一致(详见下) |
| H | 金额口径 | 读 yuan_to_fen + grep float |
✅ 只走 Decimal;半分钱报错不四舍五入;唯一 *100 是 Decimal 运算 |
| I | 金额不可篡改 | 读下单逻辑 + 查库 CHECK | ✅ 服务端按 price_id 重算;库层 total = price × qty 焊死 |
| J | 前端编译 | 8 个改动文件逐个 esbuild | ✅ 全通过 |
| K | 前后端契约 | 44 处调用 vs 已注册路由逐个比对 | ✅ 全命中(含跨服务的 /api/wx/jssdk-config 落核心) |
| L | nginx 分流 | 比对 nginx-settlement.conf location 清单 |
✅ 新端点全在已有前缀内,零基建改动 |
| M | 密钥泄露 | grep 日志/返回体/前端/提交物 | ✅ 新增日志只带订单号与状态;无 .env/.pem 提交 |
| N | 死代码 | AST 查 3 个新 service 的公开函数 | ✅ 无孤儿 |
revenue_snapshots received_amount <> 0 允许负数冲销,仍禁 0
channel_amount >= 0 已移除 (冲销要用负数)
ux_..._confirmation_positive 部分唯一 WHERE received_amount > 0
payment_confirmations uq_..._payment_order_id 回调幂等兜底
payment_orders total_amount = price × quantity 金额焊死
已支付 → paid_at 非空 / 已退款 → refunded_at 非空
org_signup_profiles payer_openid/unionid/nickname/avatar + openid 索引
① 昵称+头像+openid 三存 ✅ ② 存快照 ✅ ③ actor_role="system" ✅
④ 无微信原路退代码 ✅ ⑤ 授权闸门在签约第一步 ✅ ⑥ 只许微信内打开 ✅
⑦ 一人一份档案 ✅(去重键是「渠道+机构名+电话」,不是 openid,所以换个人填就是新档案)
⑧ 详情列出全部支付 ✅(循环 append) ⑨ 席位数带出订单 quantity ✅(latest_paid_quantity)
origin/test 基线 17 failedorigin/test 试合并无冲突settle-prod 流水线源(仍指旧仓 tongban-settlement.git,不切等于白发)GET /api/wxpay/self-check本报告所有结论标签:云机环境·非验收证据