invite_carnival_frontend.md
旧文件/invite_carnival_frontend.md · 7.4 KB · 2026-09-22 15:07:00
原始文件 下载

邀请嘉年华(千万补贴)前端对接文档

面向 App/H5 和管理后台。协议约定与 Splay 2.0 前端对接文档 第 2 节相同:POST、登录态、snake_case、金额为 decimal 字符串、时间为 Unix 秒(int64 可能是字符串或数字)。

1. 活动规则(给前端展示用)

说明
活动名 邀请嘉年华 / 千万补贴
开始时间 2026-08-15 00:00:00(东七区)
结束时间 不配固定结束日;奖池耗尽后活动结束
谁能拿补贴 下级用户完成人生第一笔硬币支持,且该笔是购买普通机器人管家(固定收益)时,给其直推上级记待领补贴
上级门槛 直推上级支持等级 ≥ Lv1
补贴比例 仅 1 层,10%(按该笔机器人单份支持金额计算)
不算首笔 历史上只要有过任意硬币支持(短剧、等级机、申购机、普通机、管家等都算),之后再买参与机型也不发
不发奖的支持 短剧打赏、申购机、等级机、复购机、智投专区、经验值/支持券支付等
停发条件 奖池剩余余额 < 当前开放的普通/管家机器人最大支持金额 × 10%
领取 上级在活动页主动领取,入账可用硬币;领取不扣奖池

前端不要自己算活动是否结束,一律以后端返回的 activity_started / activity_stopped 为准。

2. 活动状态

主接口:POST /v1/mega_subsidy/get

activity_started activity_stopped 页面状态 建议 UI
false false 未开始 倒计时 / 敬请期待,隐藏领取
true false 进行中 正常展示奖池、邀请、领取
true true 已结束(奖池耗尽) 展示「活动已结束」,已产生的待领仍可领取

加载奖池失败时:只保证 activity_started 正确,activity_stoppedfalse,奖池金额可能为空。不要把空金额当成「余额为 0 / 已结束」。

type CarnivalState = "not_started" | "running" | "stopped";

function carnivalState(started: boolean, stopped: boolean): CarnivalState {
  if (!started) return "not_started";
  if (stopped) return "stopped";
  return "running";
}

3. C 端接口

所有接口需登录。金额字段均为字符串。

3.1 活动页主数据

POST /v1/mega_subsidy/get

请求:空 body {}

响应:

字段 类型 说明
activity_started bool 是否已到开始时间
activity_stopped bool 奖池是否已按阈值耗尽
mega_subsidy_pool_amount string 奖池剩余余额
total_subsidy_amount_limit string 奖池额度(后台配置的总盘)
total_subsidy_amount_used string 已消耗 ≈ 额度 − 剩余;若后台把剩余调得比额度大,则为 "0"
wait_send_amount string 当前用户待领取金额;无记录时可能是 "",按 "0" 处理
total_send_amount string 当前用户已领取累计
mega_subsidy_ratio_1_floor string 1 层比例,本期为 "10"(单位 %)
mega_subsidy_ratio_2_floor string 本期不返,可能为空
mega_subsidy_ratio_3_floor string 本期不返,可能为空

页面建议:

3.2 领取补贴

POST /v1/mega_subsidy/receive

请求:空 body {}

成功:空对象。待领全部入账可用硬币,待领清零。

失败:

错误码 含义 前端处理
24003CODE_VIP_INVITE_ALREADY_RECEIVED 没有待领,或已经领过 Toast「暂无可领取」或刷新主接口

领取成功后重新拉 GET 主接口,刷新 wait_send_amount / total_send_amount 和用户硬币余额。

3.3 领取滚动列表(广场)

POST /v1/mega_subsidy/record/list

请求:

字段 说明
offset ≥ 0
limit 0~100
sort / order 可选,ASC / DESC

响应:

字段 说明
total 展示用总数,含填充和加码,不是真实领取人数
records[].user_id 用户 ID
records[].send_at 领取时间,Unix 秒

说明:真实记录不足 100 条时会补假数据;total 还会额外加大。只做滚动播报,不要当统计指标。接口有 60 秒进程内缓存,TTL 内假数据不会变。

3.4 我的直推首笔数据

POST /v1/mega_subsidy/first_data/get

请求:

{ "floor": 1 }

本期只支持 floor = 1

响应:

字段 说明
new_user_count 给当前用户贡献过补贴的下级人数
total_support_amount 这些下级的累计支持硬币
total_subsidy_amount 当前用户因此获得的累计补贴
subsidy_ratio 该层比例,1 层为 "10"

4. 管理后台接口

需管理员登录。

4.1 查询奖池

POST /v1/man/invite_carnival/pool/get

响应:quotaremaining_balanceactivity_startedactivity_stopped。状态判断与 C 端相同。

4.2 配置奖池

POST /v1/man/invite_carnival/pool/set

字段 说明
quota 额度。不传或空字符串表示不改
remaining_balance 剩余余额。不传或空字符串表示不改

至少传其中一个。必须 ≥ 0 的合法小数。

行为:

示例:

{ "quota": "100000" }
{ "remaining_balance": "85000" }

未配正数额度时,C 端会看到「已开始 + 已结束」。测试前先配额度。

4.3 补贴列表(原有,带奖池字段)

POST /v1/man/mega_subsidy/list

响应新增:

字段 说明
pool_quota 奖池额度
pool_remaining 奖池剩余

5. 页面状态机建议

进入活动页
  → POST /v1/mega_subsidy/get
  → 未开始:倒计时(目标 2026-08-15 00:00 东七区)
  → 进行中:奖池 + 我的待领 + 邀请引导
  → 已结束:结束态;wait_send_amount > 0 仍显示领取
领取
  → POST /v1/mega_subsidy/receive
  → 成功:刷新 get + 用户硬币
  → 24003:刷新 get
滚动播报
  → POST /v1/mega_subsidy/record/list
直推数据卡
  → POST /v1/mega_subsidy/first_data/get  { "floor": 1 }

邀请引导文案建议:

邀请好友完成人生第一笔硬币支持,且购买普通机器人或管家(固定收益),你可获得该笔支持金额 10% 的补贴。好友如果已经支持过短剧或其他产品,将不再计入。

6. 联调注意