# 17真人推筒子 API ## 環境 | | 網址 | | -------- | -------- | | 測試 | https://staging.17gaming.vip/ | | 正式 | https://17gaming.vip/ | ## 認證資訊 請聯繫我司代理取得測試環境與正式環境連線資訊 ## API ### 登入取得 JWT Token #### Request `POST /authenticate` #### Parameter | 參數 | 說明 | 其他 | | -------- | -------- | -------- | | username | 帳號 | String(必填) | | password | 密碼 | String(必填) | #### Response ```json= { "data": { "id": "1022ebec-bb41-4c37-9952-99516a4d8cb3", "name": "jb", "username": "jb", "nickname": "jb", "wallet_type": "basic", "status": "active", "jwt_token": "eyJhbGciOiJIUzI1NiJ9.eyJwbGF0Zm9ybV9pZCI6MSwiZXhwIjoxNjI3NjMxNjk4fQ.1RDlAt7nViKwfyEzzPWCfCtBxa93RnxPL9Jbo37EndU", "jwt_token_expires_at": 1627631698, "secure_token": "62a10326-d67d-47d4-a2dd-28ec52ef620c", "login_url": null, "niuniu_min_bet": 100, "niuniu_max_bet": 10000, "baccarat_min_bet": 100, "baccarat_max_bet": 10000 }, "meta": { "request_id": "2d9994c9-413f-42bf-8498-1e8ef09317d8" } } ``` ### 取得推筒子桌列表 #### Request `GET /tongs` #### Headers `Authorization: Bearer 你的JWT_TOKEN` #### Response ```json= { "data": [ { "id": 1, //房間ID "name": "推筒子房1", //房間名稱 "socket_url": "wss://17gaming.vip/cable?platform_token=eyJhbGciOiJIUzI1NiJ9.eyJwbGF0Zm9ybV9pZCI6MSwiZXhwIjoxNjI3NjMxNjk4fQ.1RDlAt7nViKwfyEzzPWCfCtBxa93RnxPL9Jbo37EndU", //房間 socket "live_url": { "flv": "https://nms-live.17gaming.vip/B37F07/6ADE7D.flv"" // flv視訊源, "rtmp": "https://nms-rtmp.17gaming.vip/B37F07/6ADE7D.flv"" // RTMP視訊源 } } ], "meta": { "request_id": "a6d072ee-ba39-45a8-8030-e1d91e5a3d22" } } ``` ### 取得房間遊戲歷史 #### Request `GET /tongs/{房間ID}/tong_game_records` #### Parameter | 參數 | 說明 | 其他 | | -------- | -------- | -------- | | start_at | 開始時間 | UNIX_TIMESTAMP(非必填,預設為24小時前,最多也僅可查詢一天內的紀錄) | | end_at | 結束時間 | UNIX_TIMESTAMP(非必填,預設為當下) | | page | 頁數 | Integer(非必填,預設為第一頁) | | per_page | 單頁筆數 | Integer(非必填,預設為50筆,最大 100 筆) | #### Headers `Authorization: Bearer 你的JWT_TOKEN` #### Response ```json= { "data": [ { "game_no": "00AC700C4C91FED7", //遊戲局號 "status": "draw", //遊戲狀態,參考下方 status 事件 "draw": { "banker": [ //莊家開牌牌面 0, 0 ], "player_1": [ //閒1開牌牌面 2, 2 ], "player_2": [ //閒2開牌牌面 3, 3 ], "player_3": [ //閒3開牌牌面 6, 6 ] }, "result": { "banker": 20.0, // 莊家點數 "player_1": 12.0, // 閒1點數 "player_2": 13.0, // 閒2點數 "player_3": 16.0 // 閒3點數 }, "created_at": 1627619714, // 遊戲開始時間 "closed_at": 1627619772 // 遊戲結算時間 }, ], "meta": { "total_pages": 1, // 總頁數 "page": 1, // 當前頁 "total_size": 1 // 本頁筆數 } } ``` ## 房間視訊源 視訊源提供 `http-flv` 與 `rtmp` 兩種格式,請使用[牌桌列表 API](#取得推筒子桌列表)中取得的的 `live_url` 來選擇你要使用的視訊源 ## Websocket 連線方式 1. 連線至在[牌桌列表 API](#取得推筒子桌列表)中的 `socket_url` 2. 向 socket 發送下方訂閱資訊,其中 `identifier` 的內容型態為字串,`channel` 內容固定是 `TongRoomChannel`,`roomId`請帶入[牌桌列表 API](#取得推筒子桌列表)中取得的`id` ```json= { "command": "subscribe", "identifier": "{\"channel\":\"TongRoomChannel\",\"roomId\":\"1\"}" } ``` 3. 收到以下資訊表示訂閱成功 ```json= { "identifier":"{\"channel\":\"TongRoomChannel\",\"roomId\":\"1\"}", "type":"confirm_subscription" } ``` 4. 收到以下資訊表示訂閱失敗 ```json= { "identifier":"{\"channel\":\"TongRoomChannel\",\"roomId\":\"1\"}", "type":"reject_subscription" } ``` 5. 你可以發送 ping 訊息來確認連線是否正常 ```json= { "command": "message", "identifier": "{\"channel\":\"TongRoomChannel\",\"roomId\":\"1\"}", "data": "{\"type\":\"ping\"}" } ``` 若是連線正常則會回傳 pong 訊息 ```json= { "identifier":"{\"channel\":\"TongRoomChannel\",\"roomId\":\"1\"}", "message":{"data":"pong"}} ``` ## 推筒子點數與牌面 1. 在 Websocket 傳送資訊中,會以`draw`來呈現該門的牌面,其中1~9的數字分別對應一筒到九筒,0代表白皮,例如`[0,3]`代表第一張牌為白皮而第二張牌為三筒 2. 在牌局結束時可在`result`中得到各門的點數計算 | 推筒子點數 | 對應API點數 | 說明 | 範例 | | -------- | -------- | -------- | -------- | | 0(鱉十) | 0 | 對應兩個牌面相加點數為10 | 🀚🀠 | | 1~9點 | 1~9 | 對應兩個牌面相加點數 | 🀝🀜 | | 半點 | 1.5~9.5 | 含有白皮組合的牌面,例如9.5為9點半 | 🀡🀆 | | 對子 | 11~19 | 兩張牌為相同對子,例如14為四筒對子 | 🀜🀜 | | 白皮對子 | 20 | 兩張牌皆為白皮 | 🀆🀆 | ## Websocket 事件 socket 資訊中會收到類似以下格式的資訊 ```json= { "identifier":"{\"channel\":\"TongRoomChannel\",\"roomId\":\"1\"}", "message":{ "data":{ "status":"startBet", "gameNo":"CDAD597A59B715FA" } } } ``` 其中`identifier` 作為辨識訂閱房間的資訊,`message`為每次傳送的事件資訊,資訊都將包裝在`data`欄位中,在`data`中都將有`status`作為事件類型以及`gameNo`為每一局局號 ### status 事件 `data`中皆有`status`作為事件類型,詳列如下: #### `startBet` 開始下注(目前下注事件為30秒) ```json= { "status":"startBet", "gameNo":"3DC1D2084687FF5F" } ``` #### `stopBet` 停止下注 ```json= { "status":"stopBet", "gameNo":"3DC1D2084687FF5F" } ``` #### `bankerDraw` 莊家開牌 ```json= { "status":"bankerDraw", "draw":[4,5], "gameNo":"CDAD597A59B715FA" } ``` #### `player1Draw` 閒1開牌 #### `player2Draw` ```json= { "status":"player1Draw", "draw":[4,5], "gameNo":"CDAD597A59B715FA" } ``` 閒2開牌 ```json= { "status":"player2Draw", "draw":[4,5], "gameNo":"CDAD597A59B715FA" } ``` #### `player3Draw` 閒3開牌 ```json= { "status":"player3Draw", "draw":[4,5], "gameNo":"CDAD597A59B715FA" } ``` #### `draw` 本局結算 ```json= { "status":"draw", "gameNo":"CDAD597A59B715FA", "draw": { "banker":[3,4], "player1":[4,5], "player2":[9,9], "player3":[7,6] }, "result":{ "banker":7.0, "player1":9.0, "player2":19.0, "player3":3.0 } } ``` ####