43f28d358b
- 新增 device-liveness(无障碍存活监控)、internal(内部回写端点)、cps-redirect(CPS 短链落地)三族单文件文档 - API 总览补录此前缺失端点:coupon prompt 频控、report/invite、wxpay 回调、platform 客户端配置、feedback/user/ad 零散读端点 - database 新增 cps_wx_user / device_liveness / launch_confirm_sample 三表文档,更新 OVERVIEW/README/comparison_record/数据库迁移/后端技术实现 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
CPS 群发短链落地(cps-redirect 族)
所属:cps-redirect 组(无前缀,挂域名根;源
app/api/v1/cps_redirect.py) | 鉴权:公网无鉴权(群里任何人点都要能跳/能领) | ← 返回 API 索引落库:点击落
cps_click、微信落地页用户落cps_wx_user;短链由cps_link解析。
运营把 /c/{code} 短链发到微信群,用户点击 → 记点击 → 按平台 302 跳转(美团/京东)或返回 H5 淘宝落地页。记点击/写用户失败绝不阻断用户跳转/领券(try/except 吞掉)。
GET /c/{code} — 短链落地
- 微信内 + 还没拿到 openid + 配了服务号 → 先
snsapi_base静默授权拿 openid,再 302 回本页。 - 非微信 / 已有 openid cookie / 未配服务号 → 直接走原逻辑(openid 可能为 None,绝不阻断)。
- 记
visit(写cps_click)后:美团/京东 302 跳target_url;淘宝 返回 H5 落地页(主视觉图 + 「复制口令」按钮)。 code不存在/失效 → 302 跳兜底(https://www.meituan.com/)。
入参:路径 code(短链码)。出参:302 Redirect 或 200 HTML(淘宝)。
POST /c/{code}/copy — 淘宝落地页点了「复制口令」
淘宝落地页是 H5,用户点「复制口令」才算转化 → 记一条 copy 事件(带 openid cookie)。
入参:路径 code;body 空。出参:{ "ok": true }。
GET /wx/oauth/cb — 微信网页授权回调(include_in_schema=False)
state='base:{code}'(静默拿 openid)或 'uinfo:{code}'(补昵称头像)。换 openid(+userinfo)→ upsert cps_wx_user → 种 cookie(wx_openid / wx_uinfo,30 天)→ 302 回落地页。任何失败兜底回落地页,绝不阻断领券。uinfo 回流带 ?authed=1,落地页据此自动触发复制(把「点领券→授权→复制」衔接成一步)。
GET /MP_verify_*.txt — 微信「网页授权域名」归属校验(include_in_schema=False)
微信请求 coupon.shaguabijia.com/MP_verify_xxx.txt 验证域名归属;端点放域名根、返回文件名核心串(纯文本)。为微信网页授权(拿 openid)接入做准备。
说明
- 两阶授权:
base静默拿 openid(统计主力、不打扰);userinfo在用户点「领券」时触发(交互触发避免微信快照页),拿昵称/头像/unionid。 cps_click不阻断:落地/跳转优先级高于统计——丢几条点击可接受,挡住用户领券不可接受。