钱包与套餐包

查询账号钱包余额与当前套餐状态、管理限时额度包(删除已耗尽的包、切换优先扣费)。

钱包与套餐包接口均属于管理接口:鉴权方式为登录会话(或用户 access token)+ Jimu-Api-User 请求头, 不接受 sk- API 令牌本身,详见 鉴权与令牌。 错误响应为管理接口形态(success/message),见 错误处理与请求追踪。

积木的额度分两个池:永久额度(quota,不过期)与限时额度包(quota_pack,有各自的过期时间)。 扣费时优先消耗被标记为"优先使用"的额度包,其余按过期时间从早到晚消耗额度包,额度包耗尽后再消耗永久额度。

方法路径说明
GET/api/user/self/wallet查询钱包余额、套餐状态与全部额度包
DELETE/api/user/self/quota-pack/{id}删除一个已耗尽的额度包
POST/api/user/self/quota-pack/{id}/preferred切换额度包的"优先使用"标记

查询钱包

GET/api/user/self/wallet

无需参数,返回当前用户的合并余额、套餐信息与全部额度包列表(含已耗尽的)。

响应200
{
  "success": true,
  "message": "",
  "data": {
    "quota": 1520000,
    "used_quota": 340000,
    "request_count": 128,
    "permanent_quota": 1000000,
    "current_package_card_id": 3,
    "current_package_code": "pro",
    "current_package_name": "Pro 套餐",
    "has_paid_package": true,
    "package_is_expired": false,
    "quota_packs": [
      {
        "id": 12,
        "user_id": 1001,
        "quota": 600000,
        "remain_quota": 520000,
        "source": "redemption",
        "source_id": 88,
        "expired_time": 1767225600,
        "preferred": false,
        "created_time": 1756400000
      }
    ],
    "quota_pack_count": 1,
    "quota_pack_total": 520000,
    "quota_pack_nearest_expiry": 1767225600,
    "package_info": {
      "package_code": "pro",
      "package_name": "Pro 套餐",
      "package_quota": 100000,
      "package_card_id": 3,
      "package_expire_time": 1759000000,
      "package_daily_quota": 100000,
      "package_days_remaining": 15
    }
  }
}
quotaint

合并余额(永久额度 + 全部额度包剩余,单位为积分)——多数场景应使用这个值判断"还能用多少"

permanent_quotaint

永久额度池余额(不含额度包)

used_quotaint

累计已用额度

request_countint

累计请求次数

current_package_codestring

当前套餐标识;no_package 表示未订阅任何套餐

current_package_namestring

当前套餐展示名称;无套餐时为「无套餐」

has_paid_packagebool

是否持有未过期的付费套餐

package_is_expiredbool

当前套餐是否已过期(或从未订阅)

quota_packsarray

全部额度包(含已耗尽的),字段见下方「额度包对象」

quota_pack_countint

额度包数量(含已耗尽)

quota_pack_totalint

全部未耗尽额度包的剩余额度合计

quota_pack_nearest_expiryint

未耗尽额度包中最早的过期时间(Unix 秒),无未耗尽额度包时为 0

package_infoobject | undefined

仅当套餐未过期时出现;套餐详情字段见下表

额度包对象

idint

额度包 ID

quotaint

该额度包的初始额度

remain_quotaint

剩余额度;为 0 时视为已耗尽,可被删除

sourcestring

来源:redemption 兑换码 / topup 充值 / admin 管理员发放 / reward 奖励

expired_timeint

过期时间(Unix 秒)

preferredbool

是否标记为优先扣费;同一用户至多一个额度包为 true

created_timeint

创建时间(Unix 秒)

package_info 子对象

仅当当前套餐未过期时出现在钱包响应中:

package_codestring

套餐标识

package_namestring

套餐展示名称

package_quotaint

套餐当前存量额度(users.package_quota)

package_card_idint

套餐模板 ID

package_expire_timeint

套餐过期时间(Unix 秒)

package_daily_quotaint

当天套餐额度总量(含刷新叠加)

package_days_remainingint

距过期的剩余天数(向上取整)

删除额度包

DELETE/api/user/self/quota-pack/{id}

只能删除剩余额度为 0(已耗尽)的额度包,仍有余额的额度包会返回失败:

剩余额度不为 0 时200
{ "success": false, "message": "额度包不存在或仍有剩余额度" }

成功时返回 {"success": true, "message": "额度包已删除"}。

切换额度包优先扣费

POST/api/user/self/quota-pack/{id}/preferred

将指定额度包标记为"优先扣费"。同一用户至多一个额度包可被标记为优先—— 再次对同一包调用会取消该标记(切换语义,非幂等置位); 对另一个包调用会自动清除原有包的标记,实现互斥。

以下情况会失败:额度包不存在、剩余额度为 0、或已过期,均返回 {"success": false, "message": "额度包不存在或已耗尽"} 或 "额度包已过期"。
响应200
{ "success": true, "data": true }

data 为切换后的新状态(true = 已设为优先,false = 已取消优先)。