福钥任务 · 前后端接线修复清单(C端断链 + B端/A端已落地)

时效:2026-08-29 波波复核|收件人:小齐(v2)/ 小冈(v3 + BFF)/ 阿仁(后端核对)
结论先行:C端 v2、v3 福钥任务 6 个游客端点的 URL 前缀写错(用了商户前缀 /workbench/key-tasks),断链属实,不是误报。修复=把这 6 处前缀改回游客前缀 /api/miniapp/key-tasks。B端(商户侧)与 A端(运营只读)入口已在本轮接好。

一、后端真值(唯一权威契约)

来源:backend/app/routers/miniapp_key_tasks.py 文件头 docstring(已读源码确认)。后端有两个 router,前缀不同、受众不同:

受众router前缀端点
游客侧(C端调用)router/api/miniapp/key-tasksGET /(在售列表)、POST /{id}/claim(领取)、GET /mine(我的)、POST /claims/{id}/complete(完成)、GET /balance(余额)、GET /ledger(流水)
商户侧(B端调用)mb_router/api/miniapp/workbench/key-tasksPOST /(创建)、PUT /{id}(编辑)、POST /{id}/publish(上架)、POST /{id}/pause(下架)、GET /(商户列表)、GET /{id}(详情)

main.py:176 两 router 均已 include_router 挂载,运行时均存在。

铁律:游客做任务=用游客前缀(无 /workbench/);商户建任务=用商户前缀(带 /workbench/)。两者不能混。


二、C端断链证据(断链属实,非误报)

scripts/check_api_url_wiring.py(check_api_url_wiring 门禁)实测结果,C端调用了后端不存在的路由(幽灵端点):

❌ /api/miniapp/workbench/key-tasks/mine           ← 游客端点,错用商户前缀
❌ /api/miniapp/workbench/key-tasks/balance         ← 游客端点,错用商户前缀
❌ /api/miniapp/workbench/key-tasks/ledger          ← 游客端点,错用商户前缀
❌ /api/miniapp/workbench/key-tasks/claims/{}/complete ← 游客端点,错用商户前缀
❌ /api/miniapp/workbench/key-tasks/{}/claim        ← 游客端点,错用商户前缀

根因:mb_router(/api/miniapp/workbench/key-tasks)里根本没有 /mine、/balance、/ledger、/claim、/claims/{id}/complete 这几个子路径(商户侧只有 list/create/detail/edit/publish/pause)。所以游客端这些调用运行时必 404(或 merchant-list 被游客调则 401/403)。

注:先前有「C端前缀实测正确、无需改动」的口头结论,本次全量 grep + 门禁复核已推翻——那条结论是误判。请以本清单为准。

断链点精确位置(v2 + v3 同构,逐文件逐行)

miniprogram-v2(8 处真实调用 + 2 处注释,合计 10 处)

miniprogram-v3(7 处真实调用 + 1 处注释,结构与 v2 一致)


三、修复清单(给小齐/小冈,机械替换即可)

改法:把上述文件里的字面量 /api/miniapp/workbench/key-tasks 全部替换为 /api/miniapp/key-tasks(去掉 /workbench 段)。其余路径(子路径 /mine、/balance、/ledger、/claim、/claims/{id}/complete)保持不变。

(不要用 check_api_url_wiring.py 验这项——它只抓 404 幽灵端点,而本 bug 是受众错:

/api/miniapp/workbench/key-tasks 在商户 router 里真实存在,游客调只拿 403/422,不报 404,旧脚本看不见。)

本清单只指出问题与修法,不代改 C端代码(C端归小齐/小冈)。修复后由 C端 真机验收(见第五节)。

四、B端 / A端 已完成(波波本轮落地,供对账)

B端(商户建福钥任务)— 已接好

A端(运营只读总览)— 已接好


五、C端修复后验收步骤(小齐/小冈)

  1. staging 环境(services/api/request.ts 切 ENV.staging,开发者工具勾「不校验合法域名」,需 Tailscale 内网)。
  2. 跑 check_api_url_wiring.py → 过滤 key-task 应 0 个 ❌。
  3. 游客登录 → 福钥任务列表(GET /api/miniapp/key-tasks)出现任务卡;领取→我的→完成→余额/流水全链路打通。
  4. 边界:断网重试、空数据空态、重复领取幂等,对照 docs/miniprogram-v2/福钥任务-验证清单.md 逐条打勾。

六、唯一剩余风险(非断链,是数据缺口)

prod 当前零真实商户、零真实福钥任务数据(仅有 test 商户)。即使 C端 前缀修好,游客列表仍可能为空——这是「没建任务」的数据缺口,不是接线问题。修复优先级:先让 1~2 个真实商户在 B端 建任务,游客端才有内容可验。


七、待办 / 不在本范围