hyapp-server/docs/flutter对接/等级体系Flutter对接.md
2026-05-14 17:44:16 +08:00

8.9 KiB
Raw Permalink Blame History

等级体系 Flutter 对接

地址

Base URLhttps://<gateway-host>

功能 Method Path
我的等级总览 GET /api/v1/levels/me/overview
单轨道等级详情 GET /api/v1/levels/tracks/{track}
我的等级奖励记录 GET /api/v1/levels/rewards

请求参数

Headers

Header 必填 说明
Authorization Bearer <access_token>
X-App-Code App 编码,默认 lalu

track

说明
wealth 财富等级,送出礼物价值累计
game 游戏等级,游戏消耗累计
charm 魅力等级,收到礼物价值累计

GET /api/v1/levels/me/overview

无 query。

GET /api/v1/levels/tracks/{track}

Path

字段 必填 说明
track wealth / game / charm

GET /api/v1/levels/rewards

Query

字段 必填 默认 说明
track 全部 wealth / game / charm
status 全部 pending / running / granted / failed
page 1 页码,从 1 开始
page_size 20 每页数量,最大 100

返回值

统一 envelope

{
  "code": "OK",
  "message": "ok",
  "request_id": "req_xxx",
  "data": {}
}

我的等级总览

{
  "code": "OK",
  "message": "ok",
  "request_id": "req_xxx",
  "data": {
    "tracks": [
      {
        "track": "wealth",
        "name": "财富等级",
        "level": 12,
        "tier_id": 2,
        "total_value": 158000,
        "current_level_required_value": 150000,
        "next_level": 13,
        "next_level_required_value": 180000,
        "display_avatar_frame_resource_id": 7001,
        "display_badge_resource_id": 7002,
        "reward_pending_count": 1,
        "sort_order": 10
      }
    ],
    "server_time_ms": 1710000000000
  }
}

tracks[]

字段 类型 说明
track string 等级轨道
name string 轨道展示名
level int 当前等级
tier_id int64 当前命中的等级层 ID没有则为 0
total_value int64 当前累计值
current_level_required_value int64 当前等级门槛值
next_level int 下一等级,没有则为 0
next_level_required_value int64 下一等级门槛值,没有则为 0
display_avatar_frame_resource_id int64 当前等级层头像框资源 ID没有则为 0
display_badge_resource_id int64 当前等级层徽章资源 ID没有则为 0
reward_pending_count int64 待发放或发放中的等级奖励数量
sort_order int 排序

单轨道等级详情

{
  "code": "OK",
  "message": "ok",
  "request_id": "req_xxx",
  "data": {
    "overview": {
      "track": "wealth",
      "name": "财富等级",
      "level": 12,
      "tier_id": 2,
      "total_value": 158000,
      "current_level_required_value": 150000,
      "next_level": 13,
      "next_level_required_value": 180000,
      "display_avatar_frame_resource_id": 7001,
      "display_badge_resource_id": 7002,
      "reward_pending_count": 1,
      "sort_order": 10
    },
    "rules": [
      {
        "track": "wealth",
        "level": 13,
        "required_value": 180000,
        "name": "财富13级",
        "status": "active",
        "reward_resource_group_id": 9001,
        "sort_order": 13,
        "display_config_json": "{\"long_badge_resource_id\":7003}",
        "created_by_admin_id": 1,
        "updated_by_admin_id": 1,
        "created_at_ms": 1710000000000,
        "updated_at_ms": 1710000000000
      }
    ],
    "tiers": [
      {
        "tier_id": 2,
        "track": "wealth",
        "min_level": 11,
        "max_level": 20,
        "name": "财富11-20级",
        "display_avatar_frame_resource_id": 7001,
        "display_badge_resource_id": 7002,
        "reward_resource_group_id": 9002,
        "status": "active",
        "display_config_json": "{}",
        "created_by_admin_id": 1,
        "updated_by_admin_id": 1,
        "created_at_ms": 1710000000000,
        "updated_at_ms": 1710000000000
      }
    ],
    "server_time_ms": 1710000000000
  }
}

rules[]

字段 类型 说明
track string 等级轨道
level int 等级
required_value int64 达到该等级需要的累计值
name string 等级展示名
status string active / disabled
reward_resource_group_id int64 达到该级发放的资源组 ID没有则为 0
sort_order int 排序
display_config_json string JSON 字符串;长徽章素材取 long_badge_resource_id
created_at_ms int64 创建时间
updated_at_ms int64 更新时间

tiers[]

字段 类型 说明
tier_id int64 等级层 ID
track string 等级轨道
min_level int 起始等级
max_level int 结束等级
name string 等级层展示名
display_avatar_frame_resource_id int64 该等级层头像框资源 ID没有则为 0
display_badge_resource_id int64 该等级层徽章资源 ID没有则为 0
reward_resource_group_id int64 进入该等级层发放的资源组 ID没有则为 0
status string active / disabled
display_config_json string JSON 字符串
created_at_ms int64 创建时间
updated_at_ms int64 更新时间

我的等级奖励记录

{
  "code": "OK",
  "message": "ok",
  "request_id": "req_xxx",
  "data": {
    "rewards": [
      {
        "reward_job_id": "greward_xxx",
        "user_id": 10001,
        "track": "wealth",
        "reward_source_type": "level",
        "reward_source_id": "13",
        "resource_group_id": 9001,
        "wallet_command_id": "growth_level_reward:greward_xxx",
        "wallet_grant_id": "grant_xxx",
        "status": "granted",
        "attempt_count": 1,
        "failure_reason": "",
        "created_at_ms": 1710000000000,
        "updated_at_ms": 1710000001000
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 20
  }
}

rewards[]

字段 类型 说明
reward_job_id string 奖励任务 ID
user_id int64 当前用户 ID
track string 等级轨道
reward_source_type string level 单级奖励;tier 等级层奖励
reward_source_id string level 时为等级;tier 时为等级层 ID
resource_group_id int64 发放资源组 ID
wallet_command_id string 钱包发放幂等命令 ID
wallet_grant_id string 钱包发放记录 ID未成功时为空
status string pending / running / granted / failed
attempt_count int 发放尝试次数
failure_reason string 失败原因
created_at_ms int64 创建时间
updated_at_ms int64 更新时间

错误处理

错误 envelope

{
  "code": "INVALID_ARGUMENT",
  "message": "invalid argument",
  "request_id": "req_xxx"
}
HTTP code 场景 Flutter 处理
400 INVALID_ARGUMENT track 非法、page / page_size 非正整数 不重试,修正参数
401 UNAUTHORIZED token 缺失、无效或过期 重新登录或刷新 token
403 PROFILE_REQUIRED 当前用户资料未完成 跳转资料补全
404 NOT_FOUND 后端返回目标不存在 刷新页面或展示空态
409 CONFLICT 后端状态冲突 刷新后重试
502 UPSTREAM_ERROR activity-service / wallet-service 暂不可用 可提示稍后重试
500 INTERNAL_ERROR 服务端内部错误 记录 request_id

只有 code == "OK" 时读取 data

IM 消息接收

当前无等级专属 TIMCustomElem

等级奖励资源组内包含钱包资产时,可能收到钱包 C2C 自定义消息:

字段
MsgType TIMCustomElem
Desc WalletBalanceChanged
Ext / extension wallet_notice
CloudCustomData TIMCustomElem.Data 相同的 JSON 字符串

TIMCustomElem.Data

{
  "event_type": "WalletBalanceChanged",
  "event_id": "wev_xxx",
  "app_code": "lalu",
  "transaction_id": "tx_xxx",
  "command_id": "resource_group_grant:growth_level_reward:greward_xxx:item:1:asset:COIN",
  "user_id": "10001",
  "asset_type": "COIN",
  "available_delta": 100,
  "frozen_delta": 0,
  "available_after": 1000,
  "frozen_after": 0,
  "balance_version": 18,
  "created_at_ms": 1710000000000,
  "source_created_at_ms": 1710000000000,
  "metadata": {}
}

处理:

条件 处理
event_type != "WalletBalanceChanged" 忽略
event_id 已处理 忽略
asset_type == "COIN" 更新金币余额
command_id 包含 growth_level_reward 刷新 /api/v1/levels/me/overview/api/v1/levels/rewards