技術與整合
技術與整合
這一頁講的是「東西壞掉的時候會怎樣」。順利的時候每家供應商看起來都一樣。
取得憑證
我們發給你一組 API 金鑰與簽章密鑰,以及一個沙盒環境。金鑰可以隨時輪替,不必停機。
後端換 token
玩家點開遊戲時,你的後端呼叫一次 launch,帶玩家識別碼、幣別與遊戲代碼,換回一個一次性 token。
導向遊戲
把 token 接在遊戲網址後面交給瀏覽器。遊戲是純 HTML5,不需要外掛,桌機與行動裝置同一份。
我方呼叫你的錢包
每一次下注與派彩,我方即時打你的錢包 API,帶冪等鍵。錢一直在你自己的系統裡。
錢包:三種結果,不是兩種
整合金流最常被寫錯的地方,是把「不知道」歸進「失敗」。
ok明確成功
對方回 200 且金額對得上。這一局照常進行。
rejected明確拒絕
餘額不足、玩家被鎖、幣別不符。回覆玩家、不建立注單,錢沒動過。
unknown結果未知
逾時、連線中斷、5xx、回應解析不了。對方可能已經扣了 —— 當失敗然後重試就是雙扣,當成功繼續發牌就是白送。這一局停在未定案,一張牌都不發。
唯一能安全判定「這筆沒發生」的依據,是對方明確回覆查無此交易。在那之前,補償程序會拿同一組冪等鍵一直問下去。
一局的生命週期
「結算中」一定要跟「進行中」分開 —— 兩者對補償程序的意思完全相反:進行中要把剩下的免費遊戲跑完,結算中要拿同一組冪等鍵重試派彩。混在一起,一局已經跑完的遊戲會被再發一次牌。
冪等與重試
- 同一個回合識別碼重送,回放原本的結果,不會重複扣款。
- 免費遊戲每一轉各有自己的冪等鍵,斷線續玩不會跳轉也不會重複。
- 派彩失敗後不會拿原鍵重送 —— 原鍵已經是一筆失敗交易,重送只會命中冪等、回放那個失敗。重試用遞增的序號,而且只在對方明確回覆查無此交易時才換。
營運商拿得到什麼
營運後台
注單查詢、玩家紀錄、單局回放、每日對帳報表。營運商帳號只看得到自己那一家 —— 租戶隔離在資料庫層強制,不是靠查詢語句自律。
每日對帳
日結報表最後會印三個必須是 0 的前提:未定案交易、轉人工交易、不平衡分錄。任何一項不是 0,那份數字就不能拿去對帳。
單局回放
客服收到玩家申訴時,用注單編號就能把那一局重算一遍,看到每一轉的盤面。
沙盒環境
附一支假錢包,可以直接測逾時、拒絕、重複請求這些情況,不用等我們配合。
資料與保存
5 年保存
注單與分錄保存 5 年。熱資料窗預設 13 個月,之後歸檔成壓縮檔。
歸檔會驗
順序是分離分區、匯出、讀回來重算雜湊、對得上才刪除。中間任何一步出錯就把分區接回去。
備份會還原
備份定期真的還原到暫時的資料庫,檢查帳務不變式。沒還原過的備份等於沒有備份。
租戶隔離
資料列層級安全性(RLS)在框架層強制,應用程式的資料庫角色沒有繞過權限。
部署
機房
東京。對台灣與東南亞延遲最低的可用選項。
遊戲前端
純 HTML5,無外掛,桌機與行動裝置同一份,玩家端走 CDN。
營運商 API
獨立網域,不經過 CDN,只做 server-to-server。
營運後台
獨立網域,與遊戲不同源。同網域的話跨站請求防護寫不出來。