Files
shaguabijia-app-server/docs/api/other/cps-redirect.md
T
guke a563c1ca4b @ (#111)
docs/api目录文档分类和补全

---------

Co-authored-by: guke <guke@autohome.com.cn>
Reviewed-on: #111
2026-07-03 15:00:37 +08:00

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 Redirect200 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 不阻断:落地/跳转优先级高于统计——丢几条点击可接受,挡住用户领券不可接受。