Files
shaguabijia-app-server/docs/integrations/meituan.md
T
marco 6c7eaa9734 docs: 跟齐 5 月 PR (#4 user/feedback / #5 ad-cooldown / #6 PG / abd8eab meituan 降级)
整轮 doc 跟齐 2026-05 落地但 doc 没补全/没更新的内容. 按 P0~P3 优先级处理.

P0 - 新 API doc + index 更新:
* docs/api/user-profile.md  (新) PATCH /api/v1/user/profile 改昵称
* docs/api/user-avatar.md   (新) POST /api/v1/user/avatar 上传头像(魔数嗅探/旧文件清理)
* docs/api/user-delete.md   (新) DELETE /api/v1/user 注销账号(软删+匿名化)
* docs/api/feedback.md      (新) POST /api/v1/feedback 提交反馈(含截图)
* docs/api/README.md           加 User/Feedback 组 + /media 静态服务段 +
                                修 UserOut "无接口可改恒为 null" 过时描述

P0 - 美团降级 / 现有 doc 校准:
* docs/api/meituan-coupons.md      加 "未配 MT_CPS 凭证降级返空" 说明
* docs/api/meituan-referral-link.md 同上 + 客户端兜底建议
* docs/api/meituan-feed.md         区分两种空结果路径(未配 vs 调用失败) +
                                    /health.mt_cps_configured 排障入口
* docs/integrations/meituan.md     "未配凭证降级" + "feed 静默吞错" 写进集成层
* ad-reward-status.md              PR #5 commit 已自带 doc 更新, 复核无需再改

P1 - 主文档大改:
* docs/后端技术实现.md
  - §1 能力表加 用户资料/外卖比价/钱包/福利/广告/反馈 (从 3 条扩到 9 条)
  - §1 数据模型纠正 "仅 1 张 user 表" -> 现有 10 张 + alembic_version
  - §2 DB 行 PG 主 / SQLite 兜底 + 加 psycopg3 行
  - §3 目录树补 user.py / feedback.py / media.py / repositories/feedback.py /
        scripts 子项 / docs/postgres-migration.md
  - §7 数据模型重写: 10 张业务表速查表 + alembic 合并迁移 f01db5d77dac 始末
  - §8 部署: 加 init_postgres.py 一句话流程 + checklist 加 "DATABASE_URL 切 PG"
        + "psycopg3 已装" + "MEDIA_ROOT 可写"
  - §10 已知问题: 加 美团降级 / agent 不鉴权 / MEDIA_ROOT serve / init_postgres bug /
        alembic 多 head 风险; 删过时 SQLite 行
  - 接口计数 11 -> 38

* docs/待办与技术债.md
  - 已解决追加: PG 切换 / 外卖比价透传 / 用户资料反馈接口 / 美团降级 /
                看广告 4 态冷却
  - 新增 "P2 DB 与 Alembic 治理" 段: alembic 多 head 团队规约 (含本次撞坑实录) +
    init_postgres.py 已知 5 处小 bug + MEDIA_ROOT serve

P2 - PG 迁移文档互指 + 迁移链补完:
* docs/数据库迁移.md
  - 顶部加 postgres-migration.md / 后端技术实现.md 互指
  - §6 迁移链 9 条 -> 12 条 (含 feedback_table / convert_dishes_jsonb /
        merge_pg_jsonb_and_feedback_heads)
  - §7 踩坑里 "多 head" 一行扩成完整故事 + 修复命令 + 团队预防规约
* docs/postgres-migration.md
  - 顶部加 数据库迁移.md / 后端技术实现.md §10 互指

P3 - 上线清单:
* docs/看广告赚金币上线清单.md
  - 设计要点加 PR #5 4 态 CTA + 后端权威派生说明 +
    VIDEO_ROUND_REQUIRED_COUNT/VIDEO_ROUND_COOLDOWN_SECONDS 常量
  - §E 端到端验收加 本轮冷却 / 弹窗 limit note / 跨设备一致 三项

所有最后更新日期同步到 2026-05-31.
2026-05-31 11:05:10 +08:00

3.0 KiB
Raw Blame History

美团联盟 CPS 开放接口(meituan

文件:app/integrations/meituan.py | 关联接口:meituan-coupons · meituan-feed · meituan-referral-link | ← 集成索引

作用

调美团联盟 CPS 开放接口:查券(列表/搜索)+ 换推广链。

函数 / 异常

函数 说明
query_coupon(...) 券查询/搜索 → /cps_open/common/api/v1/query_coupon
get_referral_link(...) 换推广链 → /cps_open/common/api/v1/get_referral_link
异常 MeituanCpsError HTTP 错误 / 业务 code != 0api 层翻成 502

签名机制(关键)

类阿里云网关 S-Ca 头,但 stringToSign 只有 4 段

METHOD\n + Content-MD5\n + Headers(按 key 升序 "k:v\n") + Url

没有 Accept / Content-Type / Date 行(加了就签名失败)。签名 = HMAC-SHA256(stringToSign, AppSecret) 的 base64。参与签名的头:S-Ca-Timestamp,S-Ca-App(在 S-Ca-Signature-Headers 里声明)。

入参换算 / 坑

  • 经纬度 × 1_000_000 取整传给美团。
  • 榜单字段是 listTopiId(美团接口的拼写,少个 c,别"纠正"成 listTopicId)。
  • searchText 时走搜索、sort_field 默认 6(离我最近);否则按 listTopiId 出榜单。
  • 换链 sid 不传则用 MT_CPS_DEFAULT_SIDlinkTypeList 默认 [1,3]

配置

配置项 说明
MT_CPS_APP_KEY / MT_CPS_APP_SECRET CPS 网关 AppKey / AppSecret
MT_CPS_HOST 网关 host
MT_CPS_DEFAULT_SID 默认推广位 sid(渠道)
MT_CPS_TIMEOUT_SEC 请求超时

未配凭证时降级(2026-05-28 引入)

api 层 3 个端点都在入口处 if not settings.mt_cps_configured: 早返空(coupons 返空数组、feed 返空 items、referral-linklink="" + link_map={}),不报 502

为什么这么设计:新开发机没填 MT_CPS_APP_KEY 时,首页一进就拉 /feed → 502 → 整屏错误,首屏体验差。降级后端业务可以先跑起来,等真要测美团 CPS 再补 key。

坏副作用:feed 本来就有"已配凭证但美团调用失败时 _fetch_topic 静默吞错"的可观测性盲区,加上"未配凭证时也返空",两种空结果路径在响应上无法区分。排障路径:

  • /health 接口暴露 mt_cps_configured: bool——先看配置
  • 改调 /coupons 让"已配凭证但调用失败"以 502 + 错误文案暴露细节

feed 调用静默吞错

api/v1/meituan.py_fetch_topicMeituanCpsError except 返回 []不打日志。导致美团接口失败时 feed 返 200 + 空 items 无声失败。建议补一条 logger.error 至少留痕,真实排障还得改调 coupons(它在配置就绪时以 502 暴露)。

备注

  • 美团接口当前无鉴权,且换链的 sid 允许客户端传值覆盖默认渠道——见对应 api 文档「备注」
  • 未配凭证降级、feed 静默吞错都在 待办与技术债.md 已记账