API
游戏试玩 API 接入文档 Official Integration Guide
图片资源 游戏资源清单
首页

游戏试玩 API 接入文档

APP
1

应用数

API
1

启动接口

DOCS
3015

游戏资源

类型统计

POST1

标签

服务端接入 HMAC-SHA256 播放短链

作者

平台官方

分组

名称方式接口
启动游戏POST/api/launch.php

接入概览

本文档面向第三方试玩站服务端接入。接入方根据平台提供的商户信息和游戏资源清单,在服务端请求启动接口,成功后将玩家跳转到平台返回的播放地址。

玩家点击游戏 接入方服务端签名 平台返回 play_url 302 跳转玩家
商户密钥只允许保存在服务端,不得出现在前端代码、App 包、公开仓库或日志明文中。

启动游戏

POST {API_BASE_URL}/api/launch.php
参数类型必填说明
merchant_idstring平台分配的商户 ID
launch_codestring游戏资源清单中的启动码
timestampintUnix 秒级时间戳,有效期 5 分钟
noncestring随机字符串,建议每次请求唯一
signaturestringHMAC-SHA256 签名
user_ipstring建议玩家客户端 IP,用于安全校验
visitor_idstring建议同一玩家保持稳定
user_agentstring建议玩家浏览器 User-Agent

签名规则

从请求 JSON 中移除 signature 字段,按参数名升序排序,使用 JSON 编码后,以商户密钥计算 HMAC-SHA256。

function canonicalPayload(array $payload): string
{
    unset($payload['signature']);
    ksort($payload);
    return json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}

$payload['signature'] = hash_hmac('sha256', canonicalPayload($payload), $merchantSecret);

响应格式

成功响应

{
  "success": true,
  "message": "",
  "data": {
    "play_url": "https://play.example.com/xxx/index.html?...",
    "play_ttl_seconds": 900,
    "charged": 0.001
  }
}

失败响应

{
  "success": false,
  "message": "签名无效",
  "data": []
}

错误码

HTTP 状态message 示例处理建议
400/422请求格式无效 / 缺少参数检查 JSON 和必填参数
403签名无效检查签名字段、密钥和参数排序
403服务器 IP 不在白名单联系平台添加服务端出口 IP
422游戏不存在或未开通检查 launch_code 是否来自最新资源清单
429请求频率超限增加防抖和服务端冷却
502游戏启动失败,请稍后重试稍后重试或联系平台排查

游戏资源

游戏资源清单独立提供,接入方前台展示游戏时使用 game_namecategorylogo_url;启动游戏时只传对应的 launch_code

试玩站游戏资源清单

14 个分类,3015 款游戏,JSON 格式。

查看图片 下载 JSON
{
  "game_id": 1,
  "game_name": "麻将胡了",
  "category": "PG",
  "launch_code": "g_d18d2c8a5d6f308aceb362c500750499",
  "logo_url": "https://654.si/uploads/games/6924366a236e9.png"
}

资源图片预览

正在载入游戏资源...

联调清单

  1. 平台提供 API 地址、商户 ID、商户密钥和游戏资源清单。
  2. 接入方提供服务端出口 IP,平台完成白名单配置。
  3. 接入方根据游戏资源清单展示游戏列表。
  4. 接入方服务端生成签名并请求启动接口。
  5. 成功响应后将玩家跳转到 play_url
  6. 测试签名错误、无效 launch_code、IP 未白名单等异常场景。