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 階段