Skip to content

投注功能(開發文檔)

最後更新:2026-04-10

📖 功能說明請參考 投注功能


架構

相關檔案

ViewController(7 個)
檔案說明
.../NewBet/BetViewController.swift投注面板
.../Bets/FB/SingleBet/FBSingleBetViewController.swiftFB 單關
.../Bets/UP/SingleBet/UPSingleBetViewController.swiftUP 單關
.../Bets/DB/SingleBet/DBSingleBetViewController.swiftDB 單關
.../Bets/FB/SeriesBet/FBSeriesPassBetViewController.swiftFB 串關
.../Bets/UP/SeriesBet/UPSeriesPassBetViewController.swiftUP 串關
.../Bets/DB/SeriesBet/DBSeriesPassBetViewController.swiftDB 串關

基礎路徑:BBSport/Tab/体育/Sport/

ViewModel / Manager(5 個)
檔案說明
.../NewBet/BetViewModel/BetViewModel.swift投注面板 VM
.../NewBet/BetViewModel/BetViewModel+LiveGame.swiftLiveGame 擴展
.../NewBet/BetManager.swift投注管理
.../Bets/Base/Controller/BaseBetViewController.swift投注基底 VC
.../Common/GameBalanceManager/GameBalanceManager.swift遊戲餘額管理

基礎路徑:BBSport/Tab/体育/Sport/

Service(3 個)
檔案說明
.../Bets/FB/Service/FBBetsService.swiftFB 投注
.../Bets/DB/service/DBBetsService.swiftDB 投注
.../Bets/UP/Service/UPBetsService.swiftUP 投注

基礎路徑:BBSport/Tab/体育/Sport/

View(20 個)
檔案說明
.../Base/View/BetResultView/SingleBetResultView.swift投注結果
.../Base/View/BetResultView/SingleBetConfirmView.swift單關確認
.../Base/View/BetResultView/SingleBetNotEnoughMoney.swift餘額不足
.../Base/View/BetResultView/SeriesPassConfirmView.swift串關確認
.../Base/View/BetResultView/SeriesPassSuccessBetView.swift串關成功
.../Base/View/BetResultView/SeriePassSuccessTable.swift串關成功 Table
.../Base/View/BetResultView/SerieSuccessOddCell.swift串關成功賠率 Cell
.../Base/View/AppointmentBet/STAppointmentAdjustOddView.swift賠率調整提示
.../Base/View/BetKeyboardView.swift投注鍵盤
.../Base/View/BetMatchInfoCell.swift投注賽事資訊 Cell
.../Base/View/BetMoneyInfoCell.swift投注金額資訊 Cell
.../Base/View/BetTableFooter.swiftTable Footer
.../Base/View/BetTableHeader.swiftTable Header
.../Base/View/CartView.swift購物車
.../Base/View/BalanceLabel.swift餘額標籤
.../Base/View/CustomTextFieldFroBeyKeyboard.swift自訂輸入框
.../Base/View/BetContentView/PreBetCommonTableView.swift預投注 TableView
.../Base/View/BetContentView/PreBetDownCell.swift預投注下方 Cell
.../Base/View/BetContentView/PreBetTopCell.swift預投注上方 Cell
.../NewBet/View/NewPreBetCommonTableView.swift新預投注 TableView

基礎路徑:BBSport/Tab/体育/Sport/Bets/(除 NewBet)

Model(22 個)
檔案說明
.../FB/FBBetCommonDatas.swiftFB 共用資料
.../FB/FBStartBetModel.swiftFB 開始投注
.../FB/Service/SingleBetModel/FBCalculateBetsModel.swiftFB 預投注
.../FB/Service/SingleBetModel/FBSingleBetResultModel.swiftFB 投注結果
.../FB/Service/SingleBetModel/UBCalculateBetsModel.swiftUB 預投注
.../FB/Service/CheckOrderModel/FBOrderStatusModel.swiftFB 訂單狀態
.../FB/Service/SeriesPassBetModel/FBSeriesPassBetResultModel.swiftFB 串關結果
.../FB/Service/SeriesPassBetModel/FBSeriesPassCalculateBetsModel.swiftFB 串關計算
.../FB/Service/AppointmentBetModel/FBAppointmentBetCommModel.swiftFB 預約共用
.../FB/Service/AppointmentBetModel/FBAppointmentResultModel.swiftFB 預約結果
.../FB/Service/AppointmentBetModel/FBAskAppointmentBetResultModel.swiftFB 預約結果查詢
.../FB/Service/AppointmentBetModel/FBAskAppointmentCashResultModel.swiftFB 預約提前結算查詢
.../FB/Service/AppointmentBetModel/FBCalculateAppointmentBetModel.swiftFB 預約限額
.../FB/FBMerchantConfig/FBMerchantDetailModel.swiftFB 商戶設定 Model
.../FB/FBMerchantConfig/FBMerchantDetailService.swiftFB 商戶設定 Service
.../DB/DBBetCommonDatas.swiftDB 共用資料
.../DB/DBStartBetModel.swiftDB 開始投注
.../DB/service/DBBetResultModel.swiftDB 投注結果
.../DB/service/DBCheckOrderModel/DBOrderStatusModel.swiftDB 訂單狀態
.../DB/service/DBQueryLatestMarketInfoModel/DBQueryLatestMarketInfoModel.swiftDB 最新盤口
.../DB/service/DBQueryMarketMaxMinBetMondyModel/DBOrderMaxBetMoney.swiftDB 投注限額
.../UP/UPBetCommonDatas.swiftUP 共用資料

基礎路徑:BBSport/Tab/体育/Sport/Bets/

Tools / Adapter(6 個)
檔案說明
.../Base/Tools/RiskFreeBetting.swift包賠投注
.../Base/Tools/BetCommonFuncs.swift投注共用函式
.../Base/Tools/BetCommonModel.swift投注共用 Model
.../Base/Tools/TimerProxy.swift計時器代理
.../Base/Adapter/BetAdapter.swift投注 Adapter
.../Base/Adapter/SeriesPassMatchAdapter.swift串關賽事 Adapter

基礎路徑:BBSport/Tab/体育/Sport/Bets/

API Request(30 個)
檔案說明
BBSport/API/FBSportAPI/Bet/FBSportAPI+CalculateBetsRequest.swiftFB 預投注計算
BBSport/API/FBSportAPI/Bet/FBSportAPI+SingleBetsRequest.swiftFB 單關下注
BBSport/API/FBSportAPI/Bet/FBSportAPI+SeriesBetsRequest.swiftFB 串關下注
BBSport/API/FBSportAPI/Bet/FBSportAPI+CheckOrderStatusRequest.swiftFB 訂單狀態
BBSport/API/FBSportAPI/Bet/FBSportAPI+AppointmentBetsRequest.swiftFB 預約投注
BBSport/API/FBSportAPI/Bet/FBSportAPI+CancleAppointmentBetsRequest.swiftFB 取消預約
BBSport/API/FBSportAPI/Bet/FBSportAPI+ModifyAppointmentBetsRequest.swiftFB 修改預約
BBSport/API/FBSportAPI/Bet/FBSportAPI+ReserveBetParameterRequest.swiftFB 預約限額
BBSport/API/FBSportAPI/Bet/FBSportAPI+CheckAppointmentBetsResultRequest.swiftFB 預約結果
BBSport/API/FBSportAPI/Bet/FBSportAPI+CheckAppointmentCashOutResultRequest.swiftFB 預約提前結算
BBSport/API/UPSportAPI/Bet/UPSportAPI+CalculateBetsRequest.swiftUP 預投注計算
BBSport/API/UPSportAPI/Bet/UPSportAPI+SingleBetsRequest.swiftUP 單關下注
BBSport/API/UPSportAPI/Bet/UPSportAPI+SeriesBetsRequest.swiftUP 串關下注
BBSport/API/UPSportAPI/Bet/UPSportAPI+CheckOrderStatusRequest.swiftUP 訂單狀態
BBSport/API/UPSportAPI/Bet/UPSportAPI+AppointmentBetsRequest.swiftUP 預約投注
BBSport/API/UPSportAPI/Bet/UPSportAPI+CancleAppointmentBetsRequest.swiftUP 取消預約
BBSport/API/UPSportAPI/Bet/UPSportAPI+ModifyAppointmentBetsRequest.swiftUP 修改預約
BBSport/API/UPSportAPI/Bet/UPSportAPI+ReserveBetParameterRequest.swiftUP 預約限額
BBSport/API/UPSportAPI/Bet/UPSportAPI+CheckAppointmentBetsResultRequest.swiftUP 預約結果
BBSport/API/UPSportAPI/Bet/UPSportAPI+CheckAppointmentCashOutResultRequest.swiftUP 預約提前結算
BBSport/API/DBSportAPI/Bet/DBSportAPI+BetRequest.swiftDB 投注
BBSport/API/DBSportAPI/Bet/DBSportAPI+LatestMarketInfoRequest.swiftDB 最新盤口
BBSport/API/DBSportAPI/Bet/DBSportAPI+MarketMaxMinBetMoneyRequest.swiftDB 投注限額
BBSport/API/DBSportAPI/Bet/DBSportAPI+OrderStatusRequest.swiftDB 訂單狀態
BBSport/API/DBSportAPI/Bet/DBSportAPI+RecordUserPreferenceRequest.swiftDB 使用者偏好
BBSport/API/STAPI/Bet/STAPI+LiveGameBet.swift直播投注
BBSport/API/STAPI/Bet/STAPI+LiveGamePreBetInfo.swift直播預投注
BBSport/API/STAPI/Bet/STAPI+RiskFreeBetBetConfirmationRequest.swift包賠確認
BBSport/API/STAPI/Bet/STAPI+RiskFreeBetConfigurationRequest.swift包賠設定
BBSport/API/STAPI/Bet/STAPI+GameBetListRequest.swift投注列表

API

單關投注


FB/UP 預投注計算

POST v1/order/batchBetMatchMarketOfJumpLine — JSON — 來源:FBSportAPI / UPSportAPI

TIP

單關與串關共用此 endpoint。單關回傳 FBCalculateBetsDataModel,串關回傳 FBSeriesPassCalculateBetsDataModel

Request:

參數型別必填說明
(body dict)[String: Any]languageTypebetMatchMarketList(含 typematchIdmarketId

Response(單關):success=truedata,型別 FBCalculateBetsDataModel

欄位型別說明
bms[FBCalculateBetsBmsModel]投注項列表

FBCalculateBetsBmsModel 主要欄位:

欄位型別說明
midInt盤口 ID
oddsString當前最新賠率(UI 展示)
real_oddsDecimal真實賠率(計算可贏額)
real_sminDecimal最小投注額
real_smaxDecimal最大投注額
ssInt銷售狀態(1=開售、-1=未開售、0=暫停)
isClosedBool是否封盤
isBetChangeBool賠率有變動
isCanSeriseBool支持串關
opFBCalculateBetsDataOPModel?投注項詳情

Response(串關):

欄位型別說明
bms[FBSeriesPassEventInfoModel]賽事資訊列表
sos[FBSeriesPassBetInfoModel]串關投注方式(含 sn=串幾、_in=注數、smin/smax=限額)

FB/UP 單關下注

POST v1/order/bet/singlePass — JSON — 來源:FBSportAPI / UPSportAPI

參數型別必填說明
(body dict)[String: Any]singleBetList(含 oddsChangeunitStakebetOptionList

Response:(JSON String → FBSingleBetResultModel

欄位型別說明
codeInt狀態碼
successBool是否成功
data[FBSingleBetResultDataModel]投注結果列表

FB/UP 串關下注

POST v1/order/betMultiple — JSON — 來源:FBSportAPI / UPSportAPI

參數型別必填說明
(body dict)[String: Any]multipleTypesingleBetListbetNamebetCountbetOdds

Response:FB/UP 單關下注 結果。


FB/UP 查詢訂單狀態

POST v1/order/getStakeOrderStatus — JSON — 來源:FBSportAPI / UPSportAPI

參數型別必填說明
orderIds[string]訂單 ID 陣列
languageTypestring固定 "CMN"

Response:(JSON String → FBOrderStatusDataModel

欄位型別說明
data[FBOrderStatusModel]訂單狀態列表(含 oidstorderStatus

預約投注(僅 FB/UP)


取得預約投注限額

POST v1/order/reserve/getBetParameter — JSON — 來源:FBSportAPI / UPSportAPI

參數型別必填說明
(body dict)[String: Any]typemarketIdmatchId

Response:success=truedata,型別 FBCalculateAppointmentBetModel

欄位型別說明
midInt?盤口 ID
misInt?最小可投注額
mlyInt最大可賠率額

預約下注

POST v1/order/reserve/bet — JSON — 來源:FBSportAPI / UPSportAPI

參數型別必填說明
(body dict)[String: Any]unitStakeoddstypemarketId

Response: JSON String,含預約投注結果狀態。


取消預約

POST v1/order/reserve/cancel — JSON

參數型別必填說明
(body dict)[String: Any]reserveId

Response: JSON String。


修改預約

POST v1/order/reserve/update — JSON

參數型別必填說明
(body dict)[String: Any]reserveIdunitStakeodds

Response: JSON String。


查詢預約投注結果

POST v1/order/reserve/statusInfoByIds — JSON

參數型別必填說明
reserveIds[string]預約投注 ID 陣列
languageTypestring固定 "CMN"

Response: JSON String → FBAskAppointmentBetResultModel


查詢預約提前結算結果

POST v1/order/reserve/cashOut/statusInfoByIds — JSON

參數型別必填說明
reserveCashOutIds[string]預約提前結算 ID 陣列
languageTypestring固定 "CMN"

Response: JSON String → FBAskAppointmentCashResultModel


DB 投注


DB 取得最新盤口資料

POST yewu13/v1/betOrder/client/queryLatestMarketInfo — JSON — 來源:DBSportAPI

參數型別必填說明
(body dict)[String: Any]matchIdListplayOptionIdList

Response:code="0000000"data,型別 [DBQueryLatestMarketInfoModel]?

欄位型別說明
idString盤口 ID
matchInfoIdString賽事 ID
marketValueString盤口值
statusInt盤口狀態(0=開盤、1=封盤、2=關盤、11=鎖盤)
playIdInt玩法 ID
marketOddsList[DBQueryMarketOddsListItemModel]投注項集合

DB 查詢投注限額

POST yewu13/v1/betOrder/client/queryMarketMaxMinBetMoney — JSON — 來源:DBSportAPI

參數型別必填說明
(body dict)[String: Any]marketIdList

Response:code="0000000"data,型別 [DBOrderMaxBetMoneyModel]?

欄位型別說明
minBetString最小可投注金額
orderMaxPayString最大可投注金額
seriesOddsString串關賠率
typeString串關類型
betCountInt投注數量
betNameString幾串幾(如 "3串1"

DB 投注(單關/串關共用)

POST yewu13/v1/betOrder/client/bet — JSON — 來源:DBSportAPI

參數型別必填說明
(body dict)[String: Any]orderDetailRespList(含 matchIdplayOptionIdoddsValuesunitStake

Response:(JSON String → DBBetResultModel

欄位型別說明
codeString狀態碼("0000000"=成功)
dataDBBetResultDataModel?投注結果

DBBetResultDataModel

欄位型別說明
orderTypeDBBetResultType?0=餘額不足、1=確認中、2=已確認、3=失敗
betMoneyTotalString?總投注金額
maxWinMoneyTotalString?最高可盈金額
orderDetailRespList[DBBetResultDetailRespListModel]單關訂單明細
seriesOrderRespList[DBBetResultDetailRespListModel]串關訂單明細

WARNING

DB 金額精度:betMoneyTotalmaxWinMoneyTotal除以 100 才是實際金額(分轉元)。

DB 餘額不足錯誤碼:0400454 / 0400455 / 0402035


DB 查詢訂單狀態

GET yewu13/v1/betOrder/queryOrderStatus — JSON — 來源:DBSportAPI

參數型別必填說明
orderNosstring訂單號,逗號隔開

Response:code="0000000"data,型別 [DBOrderStatusModel]?

欄位型別說明
orderNoString訂單號
statusInt0=已確認、1=已處理、2=已拒絕、3=待確認、4=失敗

DB 設定使用者投注偏好

POST yewu12/v1/betOrder/client/recordUserPreference — JSON — 來源:DBSportAPI

參數型別必填說明
userBetPreferint1=更好賠率、2=任意賠率、3=固定賠率
userMarketPreferstring"EU"=歐賠、"HK"=港賠

Response: 無 data(STEmptyResponse)。

WARNING

DB 不支援預約投注、骰寶、包賠。DB host 為 DBSportAPI.Host.sport,與 FB/UP 體系不同。


骰寶(LiveGame 投注)

骰寶為聊天室內的即時對局遊戲(Sicbo),使用 STAPI LiveGame 系列 API,僅 FB/UP 支持。

骰寶預投注資訊

POST api/forehead/live-bet-game/sicbo/preBetInfo — JSON — 來源:STAPI

Request:

參數型別必填說明
betOptionInt投注選項
roundIdInt對局 ID
gameIdInt遊戲 ID
liveRoomIdInt直播間 ID

Response: 型別 LiveGameBetInfoModel,含投注選項限額資訊。


骰寶投注

POST api/forehead/live-bet-game/sicbo/bet — JSON — 來源:STAPI

Request:

參數型別必填說明
roundIdInt對局 ID
roundNumberInt對局輪次
liveRoomIdInt直播間 ID
betAmountString投注金額
betOptionInt投注選項
betRemarkBetRemark投注備註(含 typechatRoomIdliveHostTypehostId

Response:(型別 LiveGameBetResponse

欄位型別說明
errorCodeString錯誤碼
messageString錯誤訊息
successBool是否成功

包賠


包賠投注配置

包賠投注(Risk-Free Bet):平台活動型投注方式,使用者在符合活動條件的賽事中投注,若投注失敗可獲得部分或全額賠償返還,降低首次投注風險。

POST api/forehead/activity/compensation/info — urlForm — 來源:STAPI

無參數,靠 Header token/uid 認證。

Response:code=1data,型別 RiskFreeBetConfigurationRequest.Response

欄位型別說明
actIdInt活動 ID
actNameString活動名稱
statusInt是否有包賠
templateString活動模板
gameRuleConfig[GameRuleConfig]盤口設置
amountSettingConfig[AmountSettingConfig]條件設定
introduction[String]活動說明

錯誤碼速查

錯誤碼平台處理
3001FB/UP餘額不足
0400454 / 0400455 / 0402035DB餘額不足
0000000DB成功

串關限制規則

規則說明
最少場數2 場(2串1)
最多場數10 場
同場限制同一 matchId 只能選 1 個投注項,新加入自動覆蓋
組合類型N串1(不包號)、N串M(包號),如 3串4、5串26、10串1013 等

實作重點

  • BetViewController:繼承 STBaseViewController<BetViewModel>,使用 Combine @Published 驅動 UI
  • 弱網訂單確認:下注回傳 confirming → 延遲 0.5s 輪詢 checkOrderStatus;仍確認中 → 記入 BetCommonDatas.betsIDs 後台定期輪詢
  • 可贏額計算:FB/UP 公式 投注金額 * (賠率 - 1);DB 串關:計算 C(n,k) 組合乘積
  • 防重複投注isBetWaitingResponse 為 true 時禁止關閉面板,5 秒後自動恢復

關鍵數字

  • FB/UP 投注面板賠率輪詢:每 2 秒
  • DB 投注面板賠率輪詢:每 5 秒
  • 弱網輪詢延遲:0.5 秒
  • 防重複投注超時:5 秒
  • 串關最多場數:10 場