# Superball 活跃活动 - 前端接口文档 ## 一、通用说明 ### 1.1 基础信息 - **接口前缀**:与现有 Game 接口一致(需带登录态) - **请求方式**:支持 `GET` / `POST`(均可,建议 POST 传参) - **鉴权**:所有接口需在「已登录」状态下调用(`checkGameLogin` + `mustGameLogin`) ### 1.2 统一响应格式 **成功:** ```json { "data": { /* 业务数据 */ }, "result": "", "msg": "success", "code": 200 } ``` **失败:** ```json { "data": [], "msg": "错误信息或多语言 key", "code": 301 } ``` - 业务数据在 **`data`** 中,前端以 `res.data` 取用。 - `code !== 200` 时按失败处理,`msg` 可做提示或走多语言。 --- ## 二、接口列表 ### 2.1 获取活动完整信息 **用途**:进入活动页时调用,拿到昨日数据、今日数据、档位配置、当前任务进度、系数、近 7 天幸运号等,用于整页展示与按钮状态。 | 项目 | 说明 | |------|------| | 路径 | `/superball/info` | | 方法 | GET / POST | | 请求参数 | 无(用户身份从登录态取) | **成功时 `data` 结构:** | 字段 | 类型 | 说明 | |------|------|------| | yesterday | object | 昨日相关数据 | | yesterday.pool_amount | number | 昨日奖池(内部单位,一般用 display) | | yesterday.pool_amount_display | number | 昨日奖池展示金额 | | yesterday.base_reward_per_ball | number | 昨日每球基础奖励(内部单位) | | yesterday.base_reward_per_ball_display | number | 昨日每球基础奖励展示金额 | | yesterday.lucky_number | number | 昨日幸运号码(0-9) | | yesterday.completed_count | number | 昨日完成人数 | | yesterday.total_balls | number | 昨日总奖励球数 | | yesterday.my_balls | array | 昨日我拥有的球(原始对象列表) | | yesterday.my_balls_with_lucky | array | 昨日我的球及是否中幸运号,项:`{ number, is_lucky }` | | yesterday.my_prize | number | 昨日已领奖金(内部单位),未领为 0 | | yesterday.my_prize_display | number | 昨日已领奖金展示金额 | | yesterday.my_multiplier | number | 昨日结算时使用的奖励系数 | | yesterday.can_claim_yesterday | boolean | 是否可以领取昨日奖金(次日领一次) | | yesterday.pending_prize | number | 待领取昨日奖金(内部单位),仅 can_claim_yesterday 为 true 时有意义 | | yesterday.pending_prize_display | number | 待领取昨日奖金展示金额 | | today | object | 今日实时数据 | | today.pool_amount | number | 今日奖池(内部单位) | | today.pool_amount_display | number | 今日奖池展示金额 | | today.completed_count | number | 今日已完成人数 | | today.total_balls | number | 今日当前总奖励球数 | | today.base_reward_per_ball | number | 今日当前每球基础奖励(内部单位) | | today.base_reward_per_ball_display | number | 今日当前每球基础奖励展示金额 | | today.my_balls | array | 今日我选的球及号码,项:`{ ball_index, number }`;未选号为空数组 `[]` | | today.number_counts | object | 每个号码被选的次数,如 `{"3": 2, "7": 1}` 表示 3 选了 2 次、7 选了 1 次;未选号为空对象 `{}` | | tiers | array | 档位配置列表 | | tiers[].tier | string | 档位:A / B / C / D / E | | tiers[].recharge_required | number | 该档充值要求(金额) | | tiers[].turnover_required | number | 该档流水要求(金额) | | tiers[].ball_count | number | 该档奖励球数 | | user_task | object \| null | 今日任务,未选档则为 null | | user_task.tier | string | 当前档位 | | user_task.recharge_required | number | 当前档充值要求 | | user_task.turnover_required | number | 当前档流水要求 | | user_task.recharge_progress | number | 当日已达成充值金额(仅统计当天) | | user_task.turnover_progress | number | 当日已达成流水金额(仅统计当天,非累计) | | user_task.task_completed | boolean | 今日任务是否已完成(充值+流水都达标) | | user_task.status | number | 0=未领球,1=已领球 | | user_task.can_claim | boolean | 是否可领取今日奖励(领球) | | user_task.can_upgrade | boolean | 是否可升级到更高档位 | | user_task.ball_count | number | 当前档可获得球数 | | multiplier | object | 当前用户系数相关 | | multiplier.value | number | 当前奖励系数(1~3) | | multiplier.consecutive_days | number | 连续完成任务天数 | | multiplier.min | number | 系数下限(常量 1) | | multiplier.max | number | 系数上限(常量 3) | | multiplier.step | number | 系数步长(常量 0.5) | | lucky_reward_per_ball | number | 每个中奖球对应的幸运号奖励金额(展示单位,常量 10);选号可重复,多个球选同一号码则按球数累加 | | lucky_numbers_7_days | array | 近 7 天幸运号码,项:`{ date, lucky_number }` | --- ### 2.2 选择今日任务档位 **用途**:用户选择今日要做的档位(A/B/C/D/E),选后不可改,只能升级到更高档。建议前端做二次确认弹窗。 | 项目 | 说明 | |------|------| | 路径 | `/superball/select-tier` | | 方法 | GET / POST | | 请求参数 | tier(必填) | | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | tier | string | 是 | 档位:A / B / C / D / E(大小写均可) | **成功时 `data`:** ```json { "message": "Tier selected" } ``` **常见失败:** 今日已选过档、档位不合法等,`msg` 会返回错误说明。 --- ### 2.3 升级今日任务档位 **用途**:今日任务已完成且当前不是 A 档时,可升级到更高档(如 D→C),进度保留,需满足新档的充值和流水要求。 | 项目 | 说明 | |------|------| | 路径 | `/superball/upgrade-tier` | | 方法 | GET / POST | | 请求参数 | tier(必填) | | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | tier | string | 是 | 目标档位:A / B / C / D / E | **成功时 `data`:** ```json { "message": "Tier upgraded" } ``` **常见失败:** 未完成任务、目标档不高于当前档、进度不足等。 --- ### 2.4 领取今日任务奖励(领球) **用途**:今日任务(充值+流水)达标且未领过时,调用后获得对应档位的「球」,之后需去选号。会更新奖池统计和用户系数。 | 项目 | 说明 | |------|------| | 路径 | `/superball/claim-reward` | | 方法 | GET / POST | | 请求参数 | 无 | **成功时 `data`:** | 字段 | 类型 | 说明 | |------|------|------| | ball_count | number | 本次获得的球数 | | message | string | 提示文案(如:领取成功,请为球选号) | **常见失败:** 未完成任务、今日已领过等。 --- ### 2.5 提交球的选号 **用途**:用户为今日领到的每个球选择号码(0-9),可重复。全部选完并确认后调用,提交后不可改。 | 项目 | 说明 | |------|------| | 路径 | `/superball/submit-numbers` | | 方法 | GET / POST | | 请求参数 | numbers(必填) | | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | numbers | array | 是 | 每个球的号码,顺序对应球序号,如 `[3, 7, 3, 9, 0]`,长度须等于今日获得的球数 | **成功时 `data`:** ```json { "message": "Numbers submitted" } ``` **常见失败:** 数量与球数不一致、今日已提交过、号码非 0-9 等。 --- ### 2.6 查询我的球及选号 **用途**:选号页或结果页查看某天「我的球」及已选号码。 | 项目 | 说明 | |------|------| | 路径 | `/superball/my-balls` | | 方法 | GET / POST | | 请求参数 | date(可选) | | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | date | string | 否 | 日期,格式 `YYYY-MM-DD`,不传默认当天 | **成功时 `data`:** | 字段 | 类型 | 说明 | |------|------|------| | balls | array | 球列表,项:`{ ball_index, number }`,ball_index 从 1 开始 | --- ### 2.7 近 7 天幸运号码 **用途**:展示最近 7 天的幸运号码(0-9),用于说明与展示。 | 项目 | 说明 | |------|------| | 路径 | `/superball/lucky-numbers` | | 方法 | GET / POST | | 请求参数 | 无 | **成功时 `data`:** | 字段 | 类型 | 说明 | |------|------|------| | lucky_numbers | array | 项:`{ date, lucky_number }`,date 为 `YYYY-MM-DD` | --- ### 2.8 领取昨日奖金 **用途**:次日用户主动领取「昨日」的奖金。昨日有选号球且未领过时,`info` 里 `yesterday.can_claim_yesterday` 为 true,并给出 `pending_prize_display`;用户点击「领取昨日奖金」后调此接口,金额入账,仅可领一次。 | 项目 | 说明 | |------|------| | 路径 | `/superball/claim-yesterday-reward` | | 方法 | GET / POST | | 请求参数 | 无 | **成功时 `data`:** | 字段 | 类型 | 说明 | |------|------|------| | total_amount | number | 本次发放总金额(内部单位) | | total_amount_display | number | 本次发放总金额展示用 | | base_amount | number | 其中基础奖励部分(内部单位) | | lucky_amount | number | 其中幸运号奖励部分(内部单位) | | multiplier | number | 结算使用的系数 | **常见失败:** 昨日已领过、昨日无球可领、奖池未就绪等。 --- ## 三、前端流程建议 1. **进入活动页** 调 `/superball/info`,用返回的 `yesterday`、`today`、`user_task`、`multiplier`、`lucky_numbers_7_days` 渲染页面。 2. **今日未选档** 展示档位列表(`tiers`),用户选择后调 `/superball/select-tier?tier=X`(建议二次确认)。 3. **今日任务进行中** 用 `user_task.recharge_progress/turnover_progress` 与 `recharge_required/turnover_required` 做进度条;若 `task_completed` 且 `can_upgrade`,可展示「升级档位」;若 `can_claim`,展示「领取奖励」按钮。 4. **领取今日奖励(领球)** 调 `/superball/claim-reward`,成功后根据返回的 `ball_count` 进入选号页。 5. **选号页** 可为每个球选 0-9,支持手动/随机,选满后调 `/superball/submit-numbers`,body 传 `numbers: [1,2,3,...]`。 6. **昨日奖金** 若 `yesterday.can_claim_yesterday === true`,展示「领取昨日奖金 ¥XX」(用 `pending_prize_display`);用户点击后调 `/superball/claim-yesterday-reward`。 7. **金额展示** 接口中带 `_display` 的字段为前端展示用金额;未带 display 的为内部单位,一般仅做兼容或特殊逻辑使用。 --- ## 四、档位与规则速查 | 档位 | 充值要求 | 流水要求 | 奖励球数 | |------|----------|----------|----------| | A | 500 | 2000 | 30 | | B | 200 | 1000 | 10 | | C | 100 | 500 | 5 | | D | 50 | 200 | 2 | | E | 29 | 100 | 1 | - 奖励系数:初始 1,连续完成 +0.5/天(上限 3),间隔 1 天未完成 -0.5(下限 1)。 - 昨日奖金:次日由用户主动领取,不自动发放;金额 = 基础奖励 × 系数 + 幸运号奖励(每中一球 10 单位展示金额)。 文档版本:基于当前后端实现整理,如有新增字段或约定以实际接口为准。