跳到主要内容

REST API

以下是面向游戏服务端的 REST API,预期由游戏服务端发起调用。

警告

这些 REST API 都是必接的。

API 端点

服务端 REST API 的端点,参见术语表中的 API Endpoint

API 规范

HTTP Protocol

服务端 REST API 支持 HTTP/2HTTP/1.1,建议游戏侧优先使用支持 HTTP/2 的网络库。

Content-Type

服务端 REST API 的请求和响应,Content-Type 均使用 application/json

提示

游戏侧应当判断响应的 Content-Typeapplication/json 时,才解析 response body 为 JSON。

HTTP Status Code

服务端 REST API 将 HTTP status code 分为三类,分别为 200, 4xx, 5xx。

为了有利于服务监控、日志分析与问题排查,API 会尽可能地使得 status code 贴合 HTTP 协议中的语义。

4xx 和 5xx 对应业务流程的错误场景,此时 response body 对应 ErrorResponse

200

API 调用成功时,会返回 HTTP 200 OK

此时 response body 的结构对应每个 API 的 Response 部分。

200 对应业务流程的 happy path,即正常业务流程中需要考虑的场景。

4xx

对应问题根源在客户端侧的错误。

4xx 的错误,通常是不可重试的(429 除外)。

API 会返回以下 4xx 的 status code:

Status CodeRetryableDescription
400 Bad RequestFalse请求不合法,例如请求格式不正确、缺少必需的 header 或字段等等。
401 UnauthorizedFalse对 Authorization header 中的信息验证不通过。
403 ForbiddenFalse身份验证不通过,例如登录 token 已失效,或账号被封禁、充值达到限额。
405 Method Not AllowedFalseHTTP method 不正确,例如需要用 POST 却用了 GET。
415 Unsupported Media TypeFalse没有指定正确的 Content-Type。
429 Too Many RequestsTrue请求过于频繁,被服务端限流了。

5xx

对应问题根源在服务端侧的错误。

5xx 的错误,通常是可重试的。

API 会返回以下 5xx 的 status code:

Status CodeRetryableDescription
500 Internal Server ErrorTrueAPI 内部遇到了预期之外的错误,例如程序内部的 bug,访问数据库/缓存失败,调用外部第三方服务失败等等。
503 Service UnavailableTrueAPI 当前无法提供服务,例如停服维护,所依赖的其他服务当前不可用等等。

ErrorResponse

API 调用失败时(即非 HTTP 200),HTTP response body 中返回的统一数据结构,是一个 JSON Object,包含以下属性:

PropertyTypeDescription
errorstring业务错误类型,可用于记录日志或数据埋点。
例如 internal_error
messagestring错误描述信息。
例如 服务器内部错误,请稍后再试

请求鉴权

服务端 REST API 对请求进行鉴权的方式,是 HTTP Request Signing

签名方式请阅读 签名算法

签名过程中使用的 Game ID 由世游分配。签名使用的私钥,使用世游为每个游戏项目生成的 Secret Key

如果请求的签名验证不通过,世游的 API 端点会返回 HTTP 401 Unauthorized

危险

游戏侧应当重视 Secret Key 的安全性,将其妥善保管,严格控制密钥的访问权限,并安全地分发至游戏服务器的运行环境。

请注意,Secret Key 一定不能放在客户端。

内购与支付

创建订单

POST /v1/server/create-order

创建游戏内购的订单,发起一个购买 + 支付的流程。

Request

PropertyTypeRequiredDescription
reference_idstring[8,64]True用于标识创建订单请求的唯一 ID。建议使用游戏侧的订单号。
combo_idstring[1,64]False发起购买的用户的唯一标识。参见术语表中的 Combo ID。 当 platform != weixin 时,该字段必传。
product_idstring[1,64]True在世游 SDK 管理后台配置的商品 ID。参见术语表中的 Product
platformstring[1,32]True客户端的运行平台。取值见术语表中的 Platform
notify_urlstring[14,255]True游戏侧异步接收发货通知的地址。参见术语表中的 Notify URL
quantityinteger[1,100]False要购买的商品的数量,默认为 1 。
metaobjectFalse订单的元数据。是一个 JSON object。
contextstring[1,255]False订单上下文,在发货通知中透传回游戏。
meta

通常情况下,订单元数据 meta 并非订单支付的主流程中所必需的。

meta 可包含以下字段,主要用于数据分析与查询,游戏服务端应当尽量提供。

PropertyTypeRequiredDescription
zone_idstring[1,64]False游戏大区 ID。
server_idstring[1,64]False游戏服务器 ID。
role_idstring[1,64]False游戏角色 ID。
role_namestring[1,64]False游戏角色名。
role_levelintegerFalse游戏角色的等级。
weixin_openidstring[1,128]False微信用户在商户对应 appid 下的唯一标识,当 platform 为 weixin 时,该字段必传。
weixin_appidstring[1,32]False微信小游戏的 appid,当 platform 为 weixin 时,该字段必传。
信息

如果 platform == "weixin" 则 meta.weixin_openid、meta.weixin_appid 必须有值。

如果 platform != "weixin" 则 combo_id 必须有值。

Response

PropertyTypeDescription
order_idstring[1,64]世游服务端创建的,标识订单的唯一 ID。
order_tokenstring[1,1024]世游服务端创建的订单 token,用于游戏客户端调用 Combo SDK 发起购买流程。
expires_atinteger订单失效时间。Unix timestamp in seconds。

中宣部防沉迷

以下接口仅用于中宣部防沉迷系统的上下线数据上报,以满足监管合规的要求。

信息

session_id 由游戏侧自行生成,每个 session_id 只要能够标识一次上下线就可以,不要复用。

最简单的生成 session_id 的方式,就是在玩家上线时生成一个 UUID

进入游戏

POST /v1/server/enter-game

通知世游服务端玩家进入游戏世界(上线)。

Request

PropertyTypeRequiredDescription
combo_idstring[1,64]True聚合用户标识。
session_idstring[1,64]True游戏会话标识。单次游戏会话的上下线动作必须使用同一会话标识上报。

Response

仅返回一个 empty JSON object。示例:

{}

离开游戏

POST /v1/server/leave-game

通知世游服务端玩家离开游戏世界(下线)。

Request

PropertyTypeRequiredDescription
combo_idstring[1,64]True聚合用户标识。
session_idstring[1,64]True游戏会话标识。单次游戏会话的上下线动作必须使用同一会话标识上报。

Response

仅返回一个 empty JSON object。示例:

{}