A3
A3 Gaming
Partner Docs
Partner API · Tài liệu tổng hợp
5 games · 11 endpoints
VI
Production · gameserver.kjcgame.com

Partner API

Tài liệu tổng hợp các API mà đối tác / aggregator có thể sử dụng trên gameserver, bao gồm API HMAC partner-facing, route public đổi token, và các API player-facing dùng JWT. Phục vụ tích hợp 5 game của hệ thống A3 Gaming.

AuthHMAC-SHA256 · JWT
Games5 titles
Endpoints11
Basegameserver.kjcgame.com
§ 01 — Tổng quan

Luồng tích hợp

Đối tác / aggregator tích hợp với gameserver theo 5 bước chuẩn dưới đây. Ba bước đầu dùng API HMAC-signed, hai bước cuối là gameplay sau khi client đã vào game service.

1
Đối tác gọi API HMAC để đăng ký hoặc đăng nhập người chơi.
2
gameserver trả về token đăng nhập tạm thời.
3
Đối tác gọi POST /api/user/token để đổi sang sessionToken.
4
Client dùng sessionToken để kết nối WebSocket vào game service tương ứng.
5
Sau khi vào game, các thao tác gameplay (spin, getLogs, getLogDetail...) chạy theo luồng game/player.
§ 02 — Endpoints

Base URL

HTTP Base URL

HTTPS https://gameserver.kjcgame.com

WebSocket Game Services

Mỗi game có một WebSocket service riêng. Sau khi đổi sessionToken, client kết nối trực tiếp tới service tương ứng theo gameId:

gameId · 1001
SuperAce
wss://game-superace.kjcgame.com
gameId · 1002
MahjongWay 2
wss://game-mahjongway2.kjcgame.com
gameId · 1003
MahjongWay
wss://game-mahjongway.kjcgame.com
gameId · 1004
Treasures of Aztec
wss://game-treasuresofaztec.kjcgame.com
gameId · 1005
Neko
wss://game-neko.kjcgame.com
§ 03 — Bảo mật

Xác thực HMAC

Các API partner-facing dưới /api/partner/*, /api/user/login, và /api/user/register đều đi qua HMAC-SHA256. Mọi request phải kèm 4 header dưới đây:

HTTP Headers
x-api-key: <partner_api_key>
x-timestamp: <unix_time_ms>
x-signature: <hmac_sha256_hex>
Content-Type: application/json

3.1 Công thức ký

Payload ký được ghép theo thứ tự cố định, ngăn cách bằng ký tự |:

Signature Payload
METHOD|PATH|TIMESTAMP|RAW_JSON_BODY

Ví dụ thực tế cho request đăng nhập:

Example
POST|/api/user/login|1714546800000|{"username":"testuser1","password":"123456"}

3.2 Quy tắc verify thực tế

  • METHOD dùng HTTP method chuẩn, thực tế là chữ in hoa như GET, POST.
  • PATH chỉ lấy phần path, không bao gồm query string.
  • Nếu request không có body thì body được xử lý thành {}.
  • x-signature là HMAC SHA256 dạng hex chữ thường.
  • x-timestamp dùng Unix time milliseconds.
  • Request hết hạn nếu lệch quá 5 phút so với server.
Bảo mật
secret_key là tài sản nhạy cảm. Không commit vào source code, không gửi qua email/chat công khai. Mọi nghi ngờ rò rỉ phải báo ngay để được rotate key.
§ 04 — Partner API

API đối tác qua HMAC

Bộ 8 endpoints partner-facing. Tất cả đều yêu cầu HMAC. Bảng tổng hợp:

MethodEndpointMục đích
GET/api/partner/gamesDanh sách game khả dụng
GET/api/partner/balanceSố dư partner
GET/api/partner/player/:playerId/balanceSố dư của 1 player
POST/api/partner/player/depositCộng tiền cho player
POST/api/partner/player/withdrawTrừ tiền player
POST/api/partner/player/walletTạo ví game cho player
POST/api/user/registerĐăng ký player
POST/api/user/loginĐăng nhập player

4.1 · Lấy danh sách game

HMAC

GET /api/partner/games

Lấy danh sách game đang available cho partner.

Response — field chính

FieldKiểuMô tả
gameIdnumberID game (1001..1005)
gameNamestringTên hiển thị của game
gameTypestringLoại game (slot, table, ...)
activebooleanGame hiện đang bật cho partner hay không

4.2 · Lấy số dư partner

HMAC

GET /api/partner/balance

Kiểm tra số dư hiện tại của partner trên hệ thống A3.

Response — field chính

FieldKiểuMô tả
partnerIdnumberID partner
partnerNamestringTên partner
balancenumberSố dư hiện tại

4.3 · Lấy số dư player

HMAC

GET /api/partner/player/:playerId/balance

Kiểm tra số dư của player thuộc partner.

Path params

FieldKiểuMô tả
playerIdnumberID người chơi

Response — field chính

  • Thông tin player (id, username, ...)
  • Tổng balance
  • locked balance (đang trong round chưa settle)
  • Danh sách ví theo từng gameId

4.4 · Cộng tiền cho player

HMAC

POST /api/partner/player/deposit

Cộng tiền vào tài khoản player.

Request body

JSON
{
  "playerId": 123,
  "amount": 1000,
  "description": "manual deposit"
}

Field

FieldKiểuMô tả
playerIdRequirednumberID người chơi
amountRequirednumberSố tiền cộng vào ví
descriptionOptionalstringGhi chú giao dịch

4.5 · Trừ tiền của player

HMAC

POST /api/partner/player/withdraw

Trừ tiền khỏi tài khoản player.

Request body

JSON
{
  "playerId": 123,
  "amount": 1000,
  "description": "manual withdraw"
}

Field

FieldKiểuMô tả
playerIdRequirednumberID người chơi
amountRequirednumberSố tiền trừ khỏi ví
descriptionOptionalstringGhi chú giao dịch

4.6 · Tạo ví game cho player

HMAC

POST /api/partner/player/wallet

Tạo ví game cho player theo từng gameId. Mỗi ví là độc lập per-game.

Request body

JSON
{
  "playerId": 123,
  "gameId": 1003,
  "currency": "VND"
}

Field

FieldKiểuMô tả
playerIdRequirednumberID người chơi
gameIdRequirednumberID game (1001..1005)
currencyOptionalstringMã tiền tệ (VND, USD...)

4.7 · Đăng ký player

HMAC

POST /api/user/register

Tạo người chơi mới. Có thể khởi tạo ví game đầu tiên ngay tại bước này.

Request body

JSON
{
  "username": "player123",
  "password": "password123",
  "initGameId": 1003,
  "gameUsername": "player123"
}

Field

FieldKiểuMô tả
usernameRequiredstringTên đăng nhập trên A3
passwordRequiredstringMật khẩu player
initGameIdRequirednumberGame tạo ví đầu tiên
gameUsernameRequiredstringUsername hiển thị trong game

4.8 · Đăng nhập player

HMAC

POST /api/user/login

Đăng nhập người chơi và nhận token tạm thời để đổi sang sessionToken ở bước kế tiếp.

Request body

JSON
{
  "username": "testuser1",
  "password": "123456"
}

Response — field chính

FieldKiểuMô tả
tokenstringLogin token tạm, đổi tiếp sang sessionToken
user.userIdnumberID người chơi nội bộ A3
user.usernamestringUsername người chơi
§ 05 — Public

API đổi token game session

5.1 · Đổi token sang sessionToken

Public · No HMAC

POST /api/user/token

Đổi token đăng nhập sang sessionToken dùng cho game. Đây là route public, không yêu cầu HMAC — thay vào đó nó verify trực tiếp token đã được cấp ở bước trước.

Request body

JSON
{
  "token": "<login_token>"
}

Response — field chính

FieldKiểuMô tả
sessionTokenstringToken dùng để kết nối WebSocket game
§ 06 — Player API

API sau khi player đăng nhập

Các API dưới đây không phải partner HMAC API trực tiếp. Chúng dùng Authorization: Bearer <token> của player session — phục vụ luồng player-facing trong app/web client của A3.

6.1 · Lấy profile người chơi

JWT Bearer

GET /api/player/profile

Lấy thông tin profile và số dư của player hiện tại (theo JWT đính kèm).

6.2 · Cập nhật balance từ phía player

JWT Bearer

POST /api/player/balance/update

Tăng hoặc giảm balance theo luồng player.

Request body

JSON
{
  "amount": 1000,
  "type": "increase",
  "reason": "manual adjustment"
}

6.3 · Lấy danh sách log chơi game

JWT Bearer

GET /api/player/logs

Lấy danh sách log của player.

Query params hỗ trợ

FieldKiểuMô tả
limitnumberSố bản ghi tối đa
skipnumberPhân trang (offset)
gameIdnumberLọc theo game
sortstringTrường & chiều sort (vd t.desc)
dateFromISO dateTừ thời điểm
dateToISO dateĐến thời điểm
datePresetstringtoday | week

6.4 · Lấy chi tiết log

JWT Bearer

GET /api/player/logs/:id

Lấy chi tiết một bản ghi log theo ID.

§ 07 — Use cases

Nhóm API thường được đối tác quan tâm

Map nhanh từ use case → endpoint:

Use caseMethodEndpoint
Lấy danh sách gameGET/api/partner/games
Đăng ký userPOST/api/user/register
Đăng nhập userPOST/api/user/login
Đổi session tokenPOST/api/user/token
Tạo ví gamePOST/api/partner/player/wallet
Lấy số dư partnerGET/api/partner/balance
Lấy số dư playerGET/api/partner/player/:playerId/balance
Cộng tiềnPOST/api/partner/player/deposit
Trừ tiềnPOST/api/partner/player/withdraw
Lấy danh sách logGET/api/player/logs
Lấy chi tiết logGET/api/player/logs/:id
§ 08 — Lưu ý

Điểm quan trọng cần nhớ

  • Các API dưới /api/partner/*API partner-facing rõ ràng, đều yêu cầu HMAC.
  • POST /api/user/registerPOST /api/user/login cũng đi qua HMAC và phục vụ tích hợp partner.
  • POST /api/user/tokenroute public, không verify HMAC. Đổi từ login token sang sessionToken.
  • GET /api/player/logsGET /api/player/logs/:id hiện là API player-facing dùng Bearer JWT, không phải route /api/partner/*.
  • Thao tác spin không phải HTTP API public riêng cho partner — spin diễn ra trong luồng gameplay sau khi client đã vào game service WebSocket tương ứng.
Phân biệt rõ 3 nhóm auth
HMAC dành cho server-to-server giữa partner và A3 — dùng cho mọi thao tác wallet/account. Public chỉ áp dụng cho /api/user/token. JWT Bearer dành cho client-side player UI — không phải kênh dành cho partner.
§ 09 — Catalog

Danh sách gameId hiện có

gameId · 1001
SuperAce
wss://game-superace.kjcgame.com
gameId · 1002
MahjongWay 2
wss://game-mahjongway2.kjcgame.com
gameId · 1003
MahjongWay
wss://game-mahjongway.kjcgame.com
gameId · 1004
Treasures of Aztec
wss://game-treasuresofaztec.kjcgame.com
gameId · 1005
Neko
wss://game-neko.kjcgame.com