BetNSettle - 下注并结算
执行下注和结算操作,这是游戏的核心 API。
请求参数
解密前 Request
{
"cipherText": "G0ZMDELeJwx+7JcIfIFOLJjkSzANPu6krGM2uw==..."
}
信息
加密说明请参考 平台端 API 实作说明
解密后 Request
{
action: 'betNSettle',
uid: 'VPSysDevTest001',
roundId: '7634846433511800000',
transferId: '7634846433511800000',
brand: 'VP',
currency: 'THB',
gameCode: 'VP_230001_1',
betTime: '2025-11-18T16:50:43.881Z',
txTime: '2025-11-18T16:50:43.881Z',
gameInfo: '{"featureBuy":0,"spinID":"[\\"7634846433511800000\\"]","cardType":0,"isFeatureGame":"","deviceType":0}',
actualBetAmt: 0.5,
validBetAmt: 0.5,
winAmt: 0,
jackpotWin: 0,
jackpotContribute: 0,
betType: 0,
betSourceId: 1
}
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | string | 是 | 固定为 "betNSettle" |
| uid | string | 是 | 会员账号 |
| roundId | string | 是 | 游戏局号 |
| transferId | string | 是 | 交易唯一識别码 |
| brand | string | 是 | 品牌代码 |
| currency | string | 是 | 币别代码 |
| gameCode | string | 是 | 游戏代码,由VP提供 |
| betTime | string | 是 | 下注时间 |
| txTime | string | 是 | 交易时间 |
| gameInfo | string | 是 | 游戏相关资讯的 JSON 字串 |
| actualBetAmt | number | 是 | 实际下注金额 |
| validBetAmt | number | 是 | 有效投注金额 |
| winAmt | number | 是 | 贏得金额,可为 0 或正数 |
| jackpotWin | number | 是 | 彩池贏得金额 |
| jackpotContribute | number | 是 | 彩池貢獻金额 |
| betType | number | 是 | 投注类型代码 |
| betSourceId | number | 是 | 交易来源代码 |
回应格式
信息
回应为明文 JSON,不需加密。
成功回应
{
status: '0000',
errText: '',
balance: 1016.00,
responseTime: '2024-12-11T01:23:38.271Z'
}
| 欄位 | 类型 | 说明 |
|---|---|---|
| status | string | 状态码,見下方状态码说明 |
| errText | string | 错误讯息,成功时为空字串 |
| balance | number | 交易后的会员余额 |
| responseTime | string | 回应时间 |
响应状态与交易结果
| 状态 | 判断下注状态 | 是否觸发重试 | 注单状态 |
|---|---|---|---|
| 0000 | 成功 | 不会 | 成立 |
| 9999 | 失敗 | 会 | 註销 |
| 1006 | 失敗 | 不会 | 註销 |
| 2001 | 成功 | 不会 | 成立 |
| 2002 | 失敗 | 不会 | 註销 |
| 超时 | 失敗 | 会 | 註销 |
注意事项
- 原子性操作: BetNSettle 是原子性操作,要麼全部成功,要麼全部失敗
- 余额计算: afterBalance = beforeBalance - actualBetAmt + winAmt
- transferId 唯一性: 每局游戏的 transferId 为唯一
- 重试策略: 未收到成功则会持续重试
- 重试頻率: 重试 5 次,每次重试之间都会使用退比指数值政策重试,(1s, 3s, 5s, 7s, 9s)
- 若上述重试接失敗且非多道具交易,则进入 rollback 階段