Skip to content

取得單局回放連結

針對玩家已經玩過的某一局,你可以向平台請求一個連結,打開後會回放那一局的過程——reels 轉動、餘額更新,和玩家當時看到的視覺順序一致。適合用於客服支援(「讓我看看這筆下注實際發生了什麼」)或爭議處理。

運作原理

平台本身從未看到一局的視覺結果——它只看到廠商透過錢包 API 提交的資金異動(BET/WIN/ROLLBACK)。錄製與渲染一局的回放畫面,完全是廠商自己的責任。這個介面的職責比較窄:驗證這一局確實屬於你,然後把連結交給你,連結指向廠商自己的回放頁面。

你(已簽名)                    平台                               廠商的遊戲伺服器
──────────────                ────────                          ───────────────────────
POST /v1/operator/rounds/replay
  { roundId, gameId }    ──▶  檢查這一局是否屬於你
                              且屬於這個遊戲
                              鑄造一個短時效 token
                         ◀──  { replayUrl }

在瀏覽器開啟 replayUrl ──────────────────────────────────────▶  解析 token,
                                                                查詢自己針對
                                                                這一局的
                                                                錄製資料,
                                                                渲染回放頁面

正因如此,回放功能是按遊戲選配(opt-in)的——請檢查 GameSummary.replayBaseUrl(見獲取遊戲目錄):如果是空值,代表這個遊戲的廠商還沒有實作錄製功能,這個介面會回傳 400只有廠商加入錄製功能之後發生的局才能回放——沒有辦法回溯錄製功能開啟之前發生的局,因為重建畫面所需的資料從一開始就沒有被擷取。

簽名並呼叫介面

簽名方式與啟動遊戲相同——見簽名與身份驗證

ts
const path = '/v1/operator/rounds/replay'
const body = JSON.stringify({
  roundId,   // 你自己記錄的這一局交易所使用的 roundId
  gameId,
})

const headers = signRequest('POST', path, operatorSecret, body, operatorId)

const res = await fetch(`${platformUrl}${path}`, {
  method: 'POST',
  headers: { ...headers, 'Content-Type': 'application/json' },
  body,
})
if (!res.ok) {
  // 400(不支援/缺少參數)、404(不是你的局)、401/429 —— 見運營商 API 參考
  throw new Error(`replay request failed: ${res.status} ${await res.text()}`)
}
const { replayUrl } = await res.json()
// 直接開啟 replayUrl(例如在你的後台工具裡 window.open(replayUrl)),
// 或是把它傳給需要審核這一局的人。

精確的請求/回應結構與錯誤情況,見運營商 API 參考

連結會過期

replayUrl 內嵌一個短時效 token(預設 15 分鐘)——每次需要時重新請求一個新連結,不要把 replayUrl 本身存起來留待之後使用。你自己交易記錄裡本來就有的 roundId 才是該保留的東西;連結則是即時生成的。