出品:波波(后端主力 / B端全权 / A端) 生成时间:2026-09-26 01:55 版本:v1
读者:C端 开发(小齐 / 小冈)
数据性质:全部来自 staging 运行时实测(/openapi.json 取全量路由 → 不带 token 真调 → 记录真实状态码与响应),非静态扫代码。
⚠️ 免责:本文只描述「A/B端 后端当前真实提供了什么」,不含 C端 前端改造方案;C端 前端接线归小齐/小冈,我不代改。
/api/miniapp/* 前缀下按业务分了 60+ 个组,C端 游客类 GET 端点 194 个。{ok:true, data, success} 和 {code:0, data, success, request_id}(见 §五)。/api/miniapp/workbench/key-tasks,游客调会拿 403/422,共 18 处未修(见 §七)。/api/miniapp/promoters 免登录可拉全量分销员,含真实人名 / user_id / 商户名(见 §七)。| 端 | 检验方式 | 结果 |
|---|---|---|
| A端 admin-console | 真 Chrome 遍历 26 个业务路由(登录态,收集 console 错误 + 渲染指标) | 26/26 PASS,控制台错误 0 |
| B端 b-workbench(餐饮) | 真 Chrome,商户 8001 真实 token | 4/4 PASS(菜品/桌台/订单/概览) |
| B端 b-workbench(分销/福钥) | 真 Chrome | 2/2 PASS(我的分销 / 福钥任务) |
| B端 b-workbench(零售 5 页) | 真 Chrome | 未通过验收,但属门禁生效:prod 无任何商户开通 retail 包,返回「该功能不属于您的业态包」(body 35 字符,非白屏)⇒ 零售页前端渲染目前是验收盲区 |
| 后端(staging) | 全量路由 × 免登录真调 | 495 路由;公开 31 / 需鉴权 127 / 其他 36(多为 {id} 占位未填导致的 422,属预期) |
顺带修的:PanelRenderer.css 从未被 import,导致 B端 工作台面板长期裸渲染(无卡片底/间距/按钮样式)——本轮已接线修复。
顺带清理的:一条验收脚本在 prod 遗留了 2 条「渲染验证-甲/乙」测试商品,已删除,prod retail_products 计数归 0。
这批 C端 可以不登录直接调。凡不在此清单内的,都需带 token,否则 401/403。
/api/miniapp/calendar/api/miniapp/calendar/upcoming/api/miniapp/cms/posts/api/miniapp/config/site/api/miniapp/content/guide-articles/api/miniapp/content/items/api/miniapp/guides/api/miniapp/guides/categories/api/miniapp/me/assets-overview/api/miniapp/merchant-console/bo-dict/api/miniapp/merchants/recommended/api/miniapp/merchants/search/api/miniapp/products/api/miniapp/products/curated/api/miniapp/products/featured/api/miniapp/products/search/api/miniapp/promoters/api/miniapp/recommendations/api/miniapp/recommendations/combo-cards/api/miniapp/scenes/api/miniapp/services/categories/api/miniapp/site-texts/api/miniapp/stats/trust/api/miniapp/status/confirm/status/api/miniapp/status/today/api/miniapp/tasks/api/miniapp/today/kora-trackers/api/miniapp/transport/api/miniapp/voice-guide/routes/api/miniapp/weather/today/api/miniapp/weather/window几个要留意的:
/api/miniapp/me/assets-overview:路径带 me,但免登录时返回全 0 空模板(无 token 时不会泄露真实数据),安全。/api/miniapp/tasks:返回 UGC/福钥任务池(含 reward_credits、daily_cap_per_user),本就要给游客看,公开合理。/api/miniapp/stats/trust:平台信任统计(服务旅客数、认证向导数、SOP 覆盖率),公开合理。/api/miniapp/status/confirm/status:点位确认状态(非个人信息),公开合理。/api/miniapp/promoters:免登录返回真实人名 + user_id + 商户名,⚠️ 见 §七。不带 token 一律 401/403。带游客 token 后即可调(具体权限以各端点鉴权实现为准)。
merchant-console(40 个)/api/miniapp/merchant-console/features/api/miniapp/merchant-console/fleet/dashboard/api/miniapp/merchant-console/fleet/rides/api/miniapp/merchant-console/fleet/rides/{ride_id}/api/miniapp/merchant-console/fleet/routes/api/miniapp/merchant-console/fleet/vehicles/api/miniapp/merchant-console/fleet/vehicles/{vehicle_id}/api/miniapp/merchant-console/hotel/bookings/api/miniapp/merchant-console/hotel/calendar/api/miniapp/merchant-console/hotel/folios/api/miniapp/merchant-console/hotel/folios/{fid}/api/miniapp/merchant-console/hotel/folios/{fid}/charges/api/miniapp/merchant-console/hotel/folios/{fid}/charges/{cid}/status/api/miniapp/merchant-console/hotel/folios/{fid}/deposits/api/miniapp/merchant-console/hotel/guests/api/miniapp/merchant-console/hotel/guests/{gid}/api/miniapp/merchant-console/hotel/operation-logs/api/miniapp/merchant-console/hotel/rate-plans/api/miniapp/merchant-console/hotel/room-types/api/miniapp/merchant-console/hotel/room-types/{rid}/rates/api/miniapp/merchant-console/hotel/room-units/api/miniapp/merchant-console/orders/{order_id}/refund-preview/api/miniapp/merchant-console/overview/api/miniapp/merchant-console/payment-mode/api/miniapp/merchant-console/payments/pending/api/miniapp/merchant-console/products/api/miniapp/merchant-console/restaurant/dashboard/api/miniapp/merchant-console/restaurant/menu-items/api/miniapp/merchant-console/restaurant/orders/api/miniapp/merchant-console/restaurant/room-meal-plans/api/miniapp/merchant-console/restaurant/tables/api/miniapp/merchant-console/retail/dashboard/api/miniapp/merchant-console/retail/orders/api/miniapp/merchant-console/retail/orders/{order_id}/api/miniapp/merchant-console/retail/products/api/miniapp/merchant-console/retail/products/{product_id}/api/miniapp/merchant-console/retail/products/{product_id}/stock-logs/api/miniapp/merchant-console/retail/stock-logs/api/miniapp/merchant-console/services/api/miniapp/merchant-console/tasks/pending-reviewmessages(6 个)/api/miniapp/messages/api/miniapp/messages/admin/broadcasts/api/miniapp/messages/alerts/api/miniapp/messages/orders/api/miniapp/messages/stats/api/miniapp/messages/unreaduser(6 个)/api/miniapp/user/checklist/api/miniapp/user/footprints/api/miniapp/user/info/api/miniapp/user/medals/api/miniapp/user/passport/api/miniapp/user/wishlistdemands(5 个)/api/miniapp/demands/api/miniapp/demands/categories/api/miniapp/demands/mine/api/miniapp/demands/subscriptions/mine/api/miniapp/demands/{demand_id}review(5 个)/api/miniapp/review/docs/api/miniapp/review/docs/{slug}/api/miniapp/review/docs/{slug}/audit/api/miniapp/review/docs/{slug}/versions/api/miniapp/review/docs/{slug}/versions/{commit}/diffdocs(4 个)/api/miniapp/docs/api/miniapp/docs/{document_id}/api/miniapp/docs/{document_id}/members/api/miniapp/docs/{document_id}/versionskey-tasks(4 个)/api/miniapp/key-tasks/api/miniapp/key-tasks/balance/api/miniapp/key-tasks/ledger/api/miniapp/key-tasks/minemerchant-applications(4 个)/api/miniapp/merchant-applications/admin/api/miniapp/merchant-applications/admin/{application_id}/api/miniapp/merchant-applications/mine/api/miniapp/merchant-applications/{application_id}orders(4 个)/api/miniapp/orders/api/miniapp/orders/{order_id}/api/miniapp/orders/{order_id}/pending-services/api/miniapp/orders/{order_id}/refund-previewpackages(4 个)/api/miniapp/packages/admin/all/api/miniapp/packages/orders/my/api/miniapp/packages/orders/{order_id}/api/miniapp/packages/partner/itemsadmin-settings(3 个)/api/miniapp/admin-settings/api/miniapp/admin-settings/employees/api/miniapp/admin-settings/employees/invite-linkagent(3 个)/api/miniapp/agent/delegations/api/miniapp/agent/delegations/{delegation_id}/api/miniapp/agent/inventoryhomestay-apply(3 个)/api/miniapp/homestay-apply/admin/api/miniapp/homestay-apply/admin/{application_id}/api/miniapp/homestay-apply/minekora-routes-c(3 个)/api/miniapp/kora-routes-c/api/miniapp/kora-routes-c/{route_id}/api/miniapp/kora-routes-c/{route_id}/gpxscenes(3 个)/api/miniapp/scenes/certificate/api/miniapp/scenes/{scene_id}/judge/api/miniapp/scenes/{scene_id}/progressstories(3 个)/api/miniapp/stories/api/miniapp/stories/admin/api/miniapp/stories/{story_id}guide-profiles(2 个)/api/miniapp/guide-profiles/api/miniapp/guide-profiles/{guide_id}hotel(2 个)/api/miniapp/hotel/charges/{cid}/api/miniapp/hotel/orders/{order_id}/chargesidentity(2 个)/api/miniapp/identity/api/miniapp/identity/mekora-routes(2 个)/api/miniapp/kora-routes/api/miniapp/kora-routes/{route_id}redemption-codes(2 个)/api/miniapp/redemption-codes/api/miniapp/redemption-codes/{code_no}reviews(2 个)/api/miniapp/reviews/api/miniapp/reviews/{review_id}tasks-full(2 个)/api/miniapp/tasks-full/my/api/miniapp/tasks-full/pending-verifyweather(2 个)/api/miniapp/weather/api/miniapp/weather/fullcontent(1 个)/api/miniapp/content/private-routes/{route_slug}/engage-countersemergency-contacts(1 个)/api/miniapp/emergency-contactsfeed(1 个)/api/miniapp/feedfeedback(1 个)/api/miniapp/feedbackinventory(1 个)/api/miniapp/inventory/availabilityleader(1 个)/api/miniapp/leader/me/customersnotifications(1 个)/api/miniapp/notifications/badgepay(1 个)/api/miniapp/pay/orders/{order_id}/statuspoints(1 个)/api/miniapp/points/{code}/tasksafety(1 个)/api/miniapp/safety/healthsite-texts(1 个)/api/miniapp/site-texts/admin{ok, data, success}{"ok": true, "data": {"served_travelers": 36, "certified_guides": 4}, "success": true, "request_id": "08231d81..."}
{code, data, success, request_id}{"code": 0, "data": [], "success": true, "request_id": "019b6db2..."}
实测样例(免登录,/api/miniapp/stats/trust):
{"ok": true, "data": {"served_travelers": 36, "certified_guides": 4, "sop_cover_rate": 92,
"insurance_gift_per_order": false, "updated_at": "2026-09-26T01:51:55.800533+08:00"},
"success": true, "request_id": "08231d81637f"}
取值注意:
unwrap() 需同时认 ok===true 与 code===0,不能只判一种。price_fen、paid_fen),展示前必须 /100。data 可能是数组也可能是对象,也可能是 {items:[], total:n}——不要直接 as T[] 强转(历史上这导致过 .map 崩白屏)。| 链路 | 说明 | 鉴权 |
|---|---|---|
| 商品浏览 | /api/miniapp/products、/products/search、/products/featured、/products/curated | 免登录 |
| 攻略/向导 | /api/miniapp/guides、/guides/categories、/content/guide-articles | 免登录 |
| 推荐 | /api/miniapp/recommendations、/recommendations/combo-cards | 免登录 |
| 天气 | /api/miniapp/weather/today、/weather/window(和风天气 qweather;取不到时 source="unavailable",不得冒充来源) | 免登录 |
| 在地页内容 | /api/miniapp/content/items(A端录入) | 免登录 |
| 站点文案 | /api/miniapp/site-texts、/config/site | 免登录 |
| 商户检索 | /api/miniapp/merchants/search、/merchants/recommended | 免登录(无参数时返回空数组) |
| 福钥任务 | 后端游客路由是 /api/miniapp/key-tasks(无 /workbench) | 需游客 token;C端 当前 URL 写错,见 §七 |
| 分销 | /api/miniapp/distribution/*、/promoters | 需 token |
| 订单/核销 | /api/miniapp/orders/*、/redemption-codes/* | 需 token |
| 语音导览 | /api/miniapp/voice-guide/routes | 免登录 |
miniprogram-v2 / miniprogram-v3 的 services/api/keyTasks.ts 把 URL 写成 /api/miniapp/workbench/key-tasks,而后端游客路由是 /api/miniapp/key-tasks(无 /workbench)。/api/miniapp/workbench/key-tasks → /api/miniapp/key-tasks(去掉 /workbench 段),子路径 /mine /balance /ledger /claim /claims/{id}/complete 全部不动。docs/福钥任务-前后端接线修复清单-波波.md。python3 scripts/verify_key_tasks_c_gate.py(当前 FAIL 18)。不要用 check_api_url_wiring.py 验这项——它只抓 404 幽灵,抓不到 403 受众错,改没改都绿。/api/miniapp/promoters 免登录暴露真实身份信息{"id":1081,"user_id":9101,"name":"噶玛","role":"owner","merchant_id":8001,"merchant_name":"塔尔钦藏家小院",...},含服务价目。/api/miniapp/retail/*),但未经真机渲染验收。要验需先在 staging 给测试商户开 retail 包。/orders /redeem-ledger /settlement /site-data /distribution 五个页面页面上存在 Alert 提示(可能是业务提示而非报错)。Depends(get_current_user) 即公开。想加白名单=改该端点的鉴权依赖。dsl-sources.ts 的 REGISTRY(auth:false + cache:public),当前 4 个:weather / recommendations / products / guides。# 1. 福钥任务前缀(改完必须转绿)
python3 scripts/verify_key_tasks_c_gate.py
# 2. 前端调了后端没有的 URL(幽灵端点,真机才 404,编译期静默)
python3 scripts/check_api_url_wiring.py
# 3. 藏语字典(bo 复制 zh 假翻译)
python3 scripts/check_locale_dict.py
# 4. 改样式前先确认 CSS 不是僵尸文件(改了不生效)
python3 scripts/check_zombie_css.py
通用纪律:编译通过 ≠ 能用。tsc / vite build 对「菜单有条目但无路由」「前端调了后端没有的 URL」「僵尸 CSS」全程静默。前端改动必须真 Chrome 渲染验收 + 造数据,白屏必留 PAGEERROR。
# 全量路由(运行时,勿静态扫代码)
curl -s http://<staging>:8089/openapi.json | python3 -c "import json,sys; print(len(json.load(sys.stdin)['paths']))"
# 免登录判定:不带 token 真调,200=公开,401/403=需鉴权
curl -s -o /dev/null -w '%{http_code}' http://<staging>:8089/api/miniapp/products
本文所有状态码与响应样例均于 2026-09-26 01:50 前后在 staging(100.64.1.230:8089)实测取得。
A/B 端真机渲染验收使用 Chrome headless 打生产(a.kailashi.cn / b.kailashi.cn),商户 token 为 8001(hotel+restaurant)。