投注数据推送回调
VCT 平台批量向包网(Agent)推送结算后的注单数据。
说明
此接口由 VCT 平台调用包网(Agent),用于向包网系统推送或批量推送注单流水与报表数据。
注意(转账钱包模式重要事项): 在转账钱包模式下,此接口是包网系统获取所有游戏注单、派彩以及退款记录的唯一通道。游戏期间的所有下注(BET)、正常注单结算(SETTLED)、额外派奖(BONUS)以及取消和回滚(CANCEL/ROLLBACK/REFUND/VOID)日志都将统一推送到此接口,包网系统只需在此处接收并记录到报表,无需修改玩家实时余额。
接口信息
| 属性 | 值 |
|---|---|
| 路径 | POST /api/v1/callback/bet-push |
| 调用方 | VCT 平台 → 包网 (Agent) |
请求参数(VCT 发送)
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
operator_code | string | 是 | 运营商编码 |
wagers | array | 是 | 注单列表 |
wagers[].username | string | 是 | 原始玩家用户名(已剔除 VCT 平台的前缀) |
wagers[].currency | string | 是 | 币种代码(如 MYR, VND, USD 等,用于精准定位玩家多币种钱包) |
wagers[].bet_id | string | 是 | 注单编号 |
wagers[].provider_code | string | 否 | Provider 编码,用于佣金或报表按 Provider 归类 |
wagers[].provider_name | string | 否 | Provider 名称 |
wagers[].brand_code | string | 否 | Brand 编码,用于佣金或报表按 Brand 归类 |
wagers[].brand_name | string | 否 | Brand 名称 |
wagers[].game_code | string | 是 | 游戏代码 |
wagers[].game_type | string | 是 | 游戏类型 |
wagers[].bet_amount | decimal | 是 | 投注金额 |
wagers[].valid_bet_amount | decimal | 是 | 有效投注金额 |
wagers[].prize_amount | decimal | 是 | 奖金金额 |
wagers[].win_loss | decimal | 是 | 输赢金额 |
wagers[].status | string | 是 | 动作状态:BET / SETTLED / CANCEL / VOID / ROLLBACK / REFUND / BONUS |
wagers[].bet_time | string | 是 | 下注时间 |
wagers[].settle_time | string | 是 | 结算时间 |
wagers[].round_id | string | 否 | 回合 ID |
wagers[].original_transaction_id | string | 否 | 原始结算/下注交易 ID;当 status=BONUS 或取消操作时建议携带 |
sign | string | 是 | 签名 |
timestamp | long | 是 | 时间戳 |
成功响应
| 字段 | 类型 | 说明 |
|---|---|---|
received | int | 成功接收条数 |
status | string | 处理状态 |
推送范围建议
- 默认推送
SETTLED,表示正常已结算注单 - 默认推送
BONUS,表示额外奖金或独立赢分记录 - 在转账钱包模式下,
CANCEL、ROLLBACK、REFUND、VOID会通过此接口推送以修正包网系统内的游戏报表和账目结果 - 包网在转账钱包模式下仅需对接
bet(上分扣款)、settle(额度收回)和bet-push(报表数据),无需对接/cancel资金流接口 - 若包网需要按 Provider / Brand 计算佣金,建议优先使用
provider_code与brand_code做匹配,不要仅依赖game_code反查
示例请求
正常结算注单 SETTLED
json
{
"operator_code": "AG",
"wagers": [
{
"username": "player001",
"currency": "MYR",
"bet_id": "settle-20260706-0001",
"provider_code": "GSC",
"provider_name": "Game Science",
"brand_code": "PG",
"brand_name": "Pocket Games Soft",
"game_code": "PG-SLOT-001",
"game_type": "SLOT",
"bet_amount": 100.0,
"valid_bet_amount": 100.0,
"prize_amount": 200.0,
"win_loss": 100.0,
"status": "SETTLED",
"bet_time": "2026-07-06T10:00:00+08:00",
"settle_time": "2026-07-06T10:01:00+08:00",
"round_id": "round-10001"
}
],
"sign": "demo-sign",
"timestamp": 1783325100
}额外奖金记录 BONUS
json
{
"operator_code": "AG",
"wagers": [
{
"username": "player001",
"currency": "MYR",
"bet_id": "bonus-20260706-0001",
"provider_code": "GSC",
"provider_name": "Game Science",
"brand_code": "PG",
"brand_name": "Pocket Games Soft",
"game_code": "PG-SLOT-001",
"game_type": "SLOT",
"bet_amount": 0.0,
"valid_bet_amount": 0.0,
"prize_amount": 30.0,
"win_loss": 30.0,
"status": "BONUS",
"bet_time": "2026-07-06T10:01:00+08:00",
"settle_time": "2026-07-06T10:01:10+08:00",
"round_id": "round-10001",
"original_transaction_id": "settle-20260706-0001"
}
],
"sign": "demo-sign",
"timestamp": 1783325160
}示例响应
json
{
"received": 1,
"status": "success"
}推送数据逻辑与处理建议
1. 记账报表定位(极其重要)
- 仅做报表,切勿扣/加余额:在转账钱包模式下,玩家真实的可用余额已在进游戏时由
/bet一次性扣除,退出游戏时由/settle一次性加回。因此,此接口推送的每一笔注单流水日志仅用于包网系统在后台统计游戏报表和流水分成,包网切勿根据推送日志去操作或修改玩家主钱包余额,否则会导致玩家主钱包金额重复增减。
2. 幂等去重控制
- 包网系统应以
wagers[].bet_id作为唯一键值对数据进行幂等排重过滤,避免因网络重试导致游戏报表中产生重复流水数据。
3. 注单状态与修正逻辑
- 正常注单状态:
BET(原始投注)、SETTLED(正常结算)、BONUS(红利派彩)。 - 修正注单状态:
CANCEL/ROLLBACK/REFUND/VOID(注单取消或回退)。 - 修正逻辑处理:当注单状态为修正状态时,推送数据会携带指向原注单的
original_transaction_id。包网应在报表系统中定位到原有的bet_id结算记录,并将其状态和输赢金额进行冲正更新,以保持报表账目准确。
4. 自动重试机制与响应代码
- 处理成功:包网处理完毕后,请返回
HTTP 200状态码,并响应{"received": 1, "status": "success"},VCT 队列收到后会将该笔推送任务标记为成功。 - 重试保障:若包网侧数据库繁忙或网络短暂中断,应返回
HTTP 5xx或直接超时。VCT 本地队列任务检测到失败或超时后,会启动自动重试策略,在随后的时间段内进行多次重试推送,确保流水日志零丢失。
游戏商来源映射
| 游戏商 | 回调路径 | 请求格式 |
|---|---|---|
| BG | — | 不支持推送 |
| GSC | seamless/pushbetdata | JSON,wagers 数组;支持 status=SETTLED / BONUS |
| SA | — | 不支持推送(通过查询接口拉取) |
| WM | webhook(cmd=SendMemberReport) | form-data,result 数组 |