Skip to content

游戏商费率查询 ​

Brand 身份统一:本接口与游戏目录、bet-push 使用相同的 brand_guid,返回 brand_guid、brand_code、brand_name,不再返回 brand。新增 brand_guid 精确筛选,原 brand 请求参数仅搜索当前主资料的 Code / Name。需部署新版 Hub 后端后使用;佣金公式、生效日期及历史版本规则保持不变。

包网使用本接口按 Brand、币种、game_genre 和业务日期查询佣金费率,也可以拉取全部组合。

接口信息 ​

属性值
路径POST /papi/v1/game/rates
认证Agent Token(Bearer)
Content-Typeapplication/json

生产环境:https://hub-panel-api.v7stech.com
测试环境:https://hub-panel-api-dev.v7stech.com

请求参数 ​

所有参数均可选;传 {} 返回当前 Agent 在平台当天的全部可用费率。接口也兼容 application/x-www-form-urlencoded。多个筛选条件同时传入时取交集。无匹配条件返回空数组,不能忽略 GUID 条件返回全部。

参数类型说明
brand_guidstringBrand GUID,推荐使用,去除首尾空格后精确匹配
brandstring搜索当前 Brand Code 或 Name,大小写不敏感,可能返回多个 Brand
currencystring币种,例如 MYR;大小写不敏感
game_genreinteger / numeric string游戏类型数字:2 Slot、3 Fish、4 Sport、5 Card、6 Live、7 Other
as_of_datestring查询日期,格式 YYYY-MM-DD;不传时为平台当天
json
{
  "brand_guid": "30ff77f5-0616-4ecc-a8a3-80e35fcaaf3e",
  "currency": "MYR",
  "game_genre": 2,
  "as_of_date": "2026-10-10"
}

响应 ​

字段说明
data.list[].brand_guidBrand 稳定唯一 GUID,与目录及注单一致
data.list[].brand_code当前有效 Brand 主资料编码,不是全局唯一键
data.list[].brand_name当前 Brand 主资料名称,用于显示
data.list[].currency币种
data.list[].game_genre游戏类型数字;0 表示尚未整理
data.list[].game_genre_name显示名称;0、1、8 及其他未知值为 ""
data.list[].rate百分比字符串;"12.50" 表示 12.50%
data.list[].rate_version_id命中的费率版本 ID
data.list[].effective_from该版本生效日期
data.rate_unit固定为 percent
data.as_of_date本次查询采用的日期
json
{
  "status": true,
  "code": 0,
  "data": {
    "list": [{
      "brand_guid": "30ff77f5-0616-4ecc-a8a3-80e35fcaaf3e",
      "brand_code": "1007",
      "brand_name": "PG Soft",
      "currency": "MYR",
      "game_genre": 2,
      "game_genre_name": "Slot",
      "rate": "12.50",
      "rate_version_id": "rate-version-guid",
      "effective_from": "2026-10-10"
    }],
    "rate_unit": "percent",
    "as_of_date": "2026-10-10"
  },
  "msg": "获取成功"
}

响应按 brand_guid + currency + game_genre 去重;同 Code / Name 的不同 GUID 保持独立,即使费率相同也不合并。Code / Name 取当前主资料,as_of_date 控制费率版本。缺失、已删除、停用、空编码或 Provider 归属不符的 Brand 不返回;查询范围仍受当前游戏授权和启用币种限制。无生效版本时 rate_version_id、effective_from 可能省略。

0.00 是有效费率。缺少匹配记录或出现同一组合费率冲突时,应停止该组合自动结算并通知运营。

bet-push 注单新增数字 game_genre 和展示用 game_genre_name;原 game_type 只是厂商原始字段,不能用于佣金分类。部分注单没有可唯一定位游戏的 game_code;若同 Product 的游戏类型不一致,Hub 返回 game_genre=0、空名称。包网应单独标记这类注单待核对,具体结算口径需双方确认;不得从原始字符串或 Product Code 猜数字类型。

每日佣金规则 ​

平台以 UTC+8 自然日计算前一天的佣金,区间为当日 00:00:00(含)至次日 00:00:00(不含)。每个 brand_guid + currency + game_genre 单独汇总。

text
daily_net_loss = daily_bet_amount - daily_win_amount

if daily_net_loss <= 0:
  daily_commission = 0
else:
  daily_commission = daily_net_loss × decimal(daily_rate) ÷ 100

金额必须使用 decimal/BigDecimal。某一天玩家赢钱不会抵扣其他日期已经产生的佣金。月度应付金额为该月每日佣金之和,月初只汇总日账,不使用整月 Win/Lose 重新计算。

费率生效与每日流程 ​

管理员设置新费率时必须指定生效日期,最早为次日。新费率从生效日 00:00 起使用,并保留版本、操作人、操作时间和修改原因。

包网每日应执行:

  1. 次日取得前一天完整注单,按 brand_guid + currency + game_genre 汇总。
  2. 调用本接口并把前一天作为 as_of_date。例如 10 月 11 日计算 10 月 10 日时,传 2026-10-10。
  3. 使用返回的费率计算,并保存 rate、rate_version_id、effective_from、as_of_date、查询时间和原始响应作为日快照。
  4. 使用「日期 + brand_guid + currency + game_genre」作为唯一键;重试只能更新同一日账,不能重复收费。
  5. 月初汇总上个月每日佣金。

例如 10 月 8 日将费率从 10.00% 改为 12.00%,指定 10 月 10 日生效:10 月 9 日使用 10.00%,10 月 10 日使用 12.00%。

迟到、取消或修正 ​

所有事件必须使用事件 ID 和原始交易 ID 做幂等处理。VOID、CANCEL、ROLLBACK、REFUND 应作为原交易的反向修正。

  • 月份未关账:按原业务日期重算该日,仍使用该日期的历史费率版本;调整额为「重算后日佣金 − 原日佣金」。
  • 月份已关账:保留原日账,建立 post_close_adjustment_pending,关联原日期、原交易、费率版本、调整原因和金额方向;经双方对账后处理。
  • 不得把历史调整静默放入当前日或当前月,也不得重复影响 Win/Lose。

AI 开发提示词(可直接复制) ​

text
请在当前包网项目接入 VCT 游戏商费率查询并实现每日佣金。

接口:POST {VCT_BASE_URL}/papi/v1/game/rates
认证:Authorization: Bearer {agent_token}。复用现有服务端 Token 逻辑,密钥和完整 Token 不得进入浏览器或普通日志。

请求字段 brand_guid、brand、currency、game_genre、as_of_date 均可选。game_genre 只使用 2=Slot、3=Fish、4=Sport、5=Card、6=Live、7=Other;旧 game_type 不再用于请求。使用目录或注单收到的 brand_guid 精确查询;brand 仅搜索当前主资料 Code / Name,不能唯一定位。计算某个业务日时必须把该日以 YYYY-MM-DD 传入 as_of_date;{} 只用于查询平台当天全部费率。

响应每行包含 brand_guid、brand_code、brand_name、currency、game_genre、game_genre_name、rate,命中版本时附带 rate_version_id、effective_from;不再返回 brand、game_type。未知数字按 game_genre=0、game_genre_name="" 处理。rate 是百分比字符串,金额使用 decimal/BigDecimal。

每日规则:平台 UTC+8 自然日,按 brand_guid + currency + game_genre 汇总。daily_net_loss = daily_bet_amount - daily_win_amount。daily_net_loss <= 0 时 daily_commission = 0;否则 daily_commission = daily_net_loss × daily_rate ÷ 100。某日赢钱不抵扣其他日期佣金。月结金额是每日佣金之和。

实现要求:
1. 每日计算前按业务日期查询费率,保存 brand_guid、brand_code、brand_name、rate、rate_version_id、effective_from、as_of_date、查询时间和原始响应为不可变日快照。Code / Name 是查询时快照,Brand 改名不覆盖历史账单。
2. 以 date + brand_guid + currency + game_genre 建唯一键,任务必须幂等并支持安全重试。
3. rate="0.00" 有效;缺少费率或冲突时停止该组合结算并通知运营,不能默认 0%。
4. 仅 HTTP 成功且业务 code=0、status 不为 false 时使用 data.list;空列表是正常响应但不能为缺少费率的组合自动结算。
5. 未关账月份的迟到、取消和修正按原业务日重算并使用原日期费率;已关账月份生成 post_close_adjustment_pending,不直接覆盖旧账或放入当前月。
6. 旧账和旧日志无 GUID 时不得按名称猜测;只回填经过确认的唯一映射,保留历史账单。按 GUID 迁移身份,不改变佣金公式、匹配层级或钱包处理。
7. 测试同名同码不同 GUID、GUID 筛选、改名后历史快照保留,以及历史 as_of_date、费率生效日前后、0% 费率、每日净输/净赢/打平、重复任务、迟到注单、取消修正、空列表、业务错误、超时和 5xx。

复用项目现有 HTTP Client、认证、decimal、错误处理和测试框架,完成后端 Client、每日任务、日账快照、月度日账汇总及测试。

VCT Gaming Integration Platform