JoyGames · H5 Game Integration Guide
DÀNH CHO DEV GAMEFOR GAME DEVELOPERS游戏研发接入专版

Tích Hợp Game H5 (Dành Cho Dev Game)

H5 Game Integration Guide (For Game Developers)

H5 网页游戏接入指南(游戏研发接入文档)

Tài liệu tích hợp rút gọn chỉ tập trung vào các công việc Game Dev cần thực hiện. Các nghiệp vụ hạ tầng như: trích xuất query param, ký chữ ký bảo mật HMAC-SHA256, gọi API xác thực WiGame, tạo đơn hàng IAP, mở Modal thanh toán và đối soát Webhook đã được JoyGames SDK & Portal Server tự động xử lý trọn gói.

Streamlined guide focusing exclusively on Game Developer tasks. All backend complexity (URL param parsing, HMAC-SHA256 signing, WiGame session verification, IAP order creation, checkout modals, and webhook reconciliation) is handled automatically by JoyGames SDK & Portal Server.

精简版接入指南,仅保留游戏开发人员(Game Dev)需要编码的工作项。 底层繁琐的 URL 参数解析、HMAC-SHA256 签名、WiGame 鉴权验证、IAP 下单、收银台弹窗及 Webhook 签名对账等工作均由 JoyGames SDK 与 Portal 服务端全自动处理。

🎮 3 Bước Duy Nhất Dev Game Cần Làm: The Only 3 Steps For Game Developers: 游戏研发仅需完成的 3 个步骤:

BướcStep步骤 Nơi thực hiệnLocation执行端 Nội dung công việcAction Required具体工作内容
Bước 1Step 1步骤 1 🎮 Client Game (HTML)🎮 Client Game (HTML)🎮 游戏网页前端 Nhúng thẻ <script src=".../joygames-h5-wigame.js?product=..."></script> vào file HTML của game. Add <script src=".../joygames-h5-wigame.js?product=..."></script> to game HTML. 在游戏 HTML 页面中引入 JoyGames SDK 脚本标签。
Bước 2Step 2步骤 2 🎮 Client Game (JS)🎮 Client Game (JS)🎮 游戏前端脚本 Khi game khởi động, gọi const user = await joyH5.login() để lấy thông tin người chơi (User ID, OpenID, Tên hiển thị). On startup, call const user = await joyH5.login() to get player info (User ID, OpenID, Display Name). 游戏启动时调用 await joyH5.login() 获取当前玩家身份信息。
Bước 3Step 3步骤 3 🎮 Client Game (Shop)🎮 Client Game (Shop)🎮 游戏商城点击 Khi người chơi bấm mua gói nạp, gọi joyH5.pay({ price, googleProductId, serverId, charId, ... }). SDK sẽ tự mở popup thanh toán WiGame. When player purchases an item, call joyH5.pay({ price, googleProductId, serverId, charId, ... }). SDK automatically displays checkout modal. 玩家点击购买道具时,调用 joyH5.pay(...)。SDK 会自动唤起大厅支付弹窗。

01 Nhúng SDK vào Game HTML Embed SDK into Game HTML 在游戏网页中引入 SDK 🎮 CLIENT GAME🎮 GAME CLIENT🎮 游戏前端

Chèn 1 thẻ <script> vào file index.html của game H5. Thay {productCode} bằng mã game do JoyGames cấp (ví dụ: b18tiennghich):

Add a single <script> tag to your game's index.html. Replace {productCode} with your game code (e.g., b18tiennghich):

在游戏网页 index.html 中引入一行 SDK 脚本。将 {productCode} 替换为您在 JoyGames 后台配置的游戏标识(例如:b18tiennghich):

<!-- Staging / Dev Test -->
<script src="https://devsdkapi.joyplay.vn/sdk/joygames-h5-wigame.js?product=b18tiennghich"></script>

<!-- Production / Live -->
<script src="https://sdkapi.joygames.vn/sdk/joygames-h5-wigame.js?product=b18tiennghich"></script>

Khởi tạo đối tượng SDK trong game JavaScript:

Initialize the SDK object in your game JavaScript:

在游戏 JS 中初始化 SDK 实例:

const joyH5 = new JoyGameH5WiGame({
  productCode: 'b18tiennghich', // Mã game trên Portal
  env: 'live'                  // 'live' hoặc 'sandbox' (khi test nội bộ)
});

02 Đăng Nhập & Lấy Thông Tin Người Chơi (joyH5.login) Login & Get Player Profile (joyH5.login) 用户登录与角色鉴权 (joyH5.login) 🎮 CLIENT GAME🎮 GAME CLIENT🎮 游戏前端

Khi game bắt đầu nạp, gọi hàm joyH5.login(). SDK sẽ tự động lấy token từ URL, kết nối với Portal để xác thực và trả về thông tin tài khoản người chơi:

When the game starts loading, call joyH5.login(). The SDK automatically extracts session tokens, verifies with the portal, and returns player credentials:

游戏加载就绪时调用 joyH5.login()。SDK 会全自动提取会话参数并与 Portal 验证,随后返回用户信息:

try {
  const user = await joyH5.login();
  
  console.log('Đăng nhập thành công!');
  console.log('User ID Portal:', user.id);
  console.log('Tên hiển thị:', user.name);
  console.log('WiGame OpenID:', user.wigameUserId);

  // Tiến hành cho người chơi vào màn hình game
  enterGame(user);
} catch (err) {
  console.error('Lỗi đăng nhập:', err.message);
}

Thông tin đối tượng user trả về:

Returned user object fields:

返回的 user 用户对象字段:

Field Type Ý nghĩa / Mô tảDescription说明
id number ID duy nhất của người chơi trên hệ thống JoyGames Portal Unique user ID on JoyGames Portal JoyGames 平台唯一用户 ID
wigameUserId string OpenID của người chơi từ Cổng WiGame / Tammi (ví dụ: wg_11bb71...) Player OpenID from WiGame / Tammi Portal WiGame / Tammi 开放平台的用户唯一标识 OpenID
name string Tên hiển thị của người chơi trên WiGame Display name of player 玩家在 WiGame 中的昵称
username string Username định danh tài khoản Account username 系统分配的账号名

03 Mua Vật Phẩm / Nạp Game (joyH5.pay) In-Game Purchase (joyH5.pay) 商城充值与道具购买 (joyH5.pay) 🎮 CLIENT GAME🎮 GAME CLIENT🎮 游戏前端

Khi người chơi nhấn vào gói nạp trong Shop Game, gọi joyH5.pay(...). SDK sẽ tự động mở Popup Bottom Sheet thanh toán của Super App WiGame / Tammi (người chơi xác nhận thanh toán qua ví Tammi hoặc trừ Gold WiGame):

When player clicks purchase in your shop, call joyH5.pay(...). The SDK automatically triggers the WiGame / Tammi Checkout Bottom Sheet:

当玩家在商城中点击购买道具时,调用 joyH5.pay(...)。SDK 会全自动弹出 WiGame / Tammi 收银台确认弹窗(扣除 WiGame Gold 或 Tammi 钱包余额):

const payResult = await joyH5.pay({
  price: 20000,                          // BẮT BUỘC: Giá tiền VND (ví dụ: 20000)
  packageName: 'Rương 25 Kim Cương',     // BẮT BUỘC: Tên gói hiển thị trên hoá đơn
  googleProductId: 'pack_20k',           // BẮT BUỘC: Mã gói nạp (khớp với cấu hình)
  serverId: 's1',                        // BẮT BUỘC: Server ID của nhân vật
  charId: '10001',                       // BẮT BUỘC: ID nhân vật nhận đồ
  charName: 'Độc Cô Cầu Bại',            // TÙY CHỌN: Tên nhân vật
  ext: 'cp_order_9981'                   // TÙY CHỌN: Dữ liệu custom gửi về IPN callback
});

if (payResult.success) {
  console.log('Thanh toán thành công!');
  console.log('Mã đơn Portal:', payResult.orderId);
  console.log('Mã đơn WiGame:', payResult.wigameOrderId);
  // Lưu ý: Kim cương/vật phẩm sẽ được Portal tự động cộng vào tài khoản người chơi sau khi thanh toán thành công,
  // client game chỉ cần cập nhật trạng thái UI hiển thị.
} else {
  console.warn('Người chơi đã huỷ hoặc thanh toán thất bại');
}
Popup Xác nhận mua vật phẩm WiGame / Tammi

📱 Popup Bottom Sheet Xác nhận mua vật phẩm tự động bật lên khi gọi joyH5.pay() 📱 Native WiGame / Tammi bottom sheet automatically triggered by joyH5.pay() 📱 调用 joyH5.pay() 时由大厅自动唤起的原生收银台底部弹窗

Bảng tham số truyền vào hàm joyH5.pay():

Parameters for joyH5.pay():

joyH5.pay() 参数说明表:

Param Type Bắt buộcRequired必填 Mô tảDescription说明
price number Có Số tiền cần thanh toán theo đơn vị VND (tối thiểu 1000) Payment amount in VND (minimum 1000) 支付金额(单位:VND,最低 1000)
packageName string Có Tên gói vật phẩm (ví dụ: "Rương 25 Kim Cương") hiển thị trên hoá đơn Item/package title displayed on invoice 道具套餐名称(如“25钻石宝箱”),显示于支付界面
googleProductId string Có Mã SKU gói nạp (ví dụ: pack_20k, pack_50k) Package SKU identifier (e.g. pack_20k) 道具计费点标识 SKU(如 pack_20k)
serverId string Có Mã server / máy chủ nhân vật đang chơi (ví dụ: s1) Game server ID (e.g. s1) 角色所在的游戏区服 ID(如 s1)
charId string Có ID nhân vật của người chơi trong game (dùng để nạp kim cương vào đúng nhân vật) Character ID in game 角色 ID,发货时根据此 ID 准确充值到对应角色
charName string Không Tên nhân vật (hiển thị trên log đối soát) Character name 角色昵称
ext string Không Chuỗi dữ liệu riêng của game (ví dụ mã đơn client, thông tin custom lưu kèm hóa đơn) Custom game passthrough string attached to transaction records 游戏自定义透传字段,附带于订单对账记录中

04 Checklist Bàn Giao & Cấu Hình Integration Checklist 联调与配置清单

Khi tích hợp game, hai bên kỹ thuật cần trao đổi các thông tin sau:

Information exchanged during integration:

联调上线需互相对接的配置项:

🎮 Phía Game Dev cung cấp cho JoyGames:
1. URL Game H5: Link web game chạy trong iframe (ví dụ: https://tiennghich.acejoygame.com/vnmaster/index_vnh5.html?pid=206&gid=100013&p_mid=1&mid=10000).
2. Bảng cấu hình gói nạp: Danh sách googleProductId, tên gói và giá tiền VND tương ứng.

🎮 Game Dev provides to JoyGames:
1. Game URL: Web game URL loaded in iframe (e.g. https://tiennghich.acejoygame.com/vnmaster/index_vnh5.html?pid=206&gid=100013&p_mid=1&mid=10000).
2. Package Price Sheet: List of googleProductId, package names, and prices in VND.

🎮 游戏研发需提供给 JoyGames 的信息:
1. H5 游戏链接:嵌入 iframe 加载的游戏网页地址(如 https://tiennghich.acejoygame.com/vnmaster/index_vnh5.html?pid=206&gid=100013&p_mid=1&mid=10000)。
2. 计费点配置表:包含 googleProductId、道具名称及对应 VND 价格的清单。

⚙️ Phía JoyGames cung cấp cho Game Dev:
1. productCode: Mã định danh game trên Portal (ví dụ: b18tiennghich) để truyền vào SDK.
2. Tài khoản test: Môi trường dev/staging và tài khoản để test nạp sandbox.

⚙️ JoyGames provides to Game Dev:
1. productCode: Game identifier on Portal (e.g. b18tiennghich) passed into the SDK.
2. Test Account: Dev/staging environment credentials for testing sandbox checkout.

⚙️ JoyGames 需提供给游戏研发的信息:
1. productCode:游戏唯一标识码(如 b18tiennghich),填入 SDK 初始化配置。
2. 测试账号:用于在 dev/staging 环境体验沙箱支付的测试环境与账号。