# 游戏登录 ## 文档说明 本文档为游戏接入登录模块提供指引,游戏登录是玩家在GTarcade平台进入游戏服务器的唯一入口。
## 前端接入 前端在启动游戏时会进行传参,游戏方可根据传参信息进行登陆操作。登录期间,游戏方需要发起关联游戏的请求,微端会将本地token发给游戏,从而将游戏登录成功或失败的信息告知平台。
#### 关联请求(必接) > 主要是为了微端精准的识别每一个游戏,防止用户在平台打开多个游戏时,相互之间的通信不会出现错误 **通信方式:** 游戏传给微端的参数(TCP) **加密方式:** AES **数据格式:** JSON **参数内容:** | 参数名 | 必选 | 类型 | 说明 | | :------ | :--- | :--- | :--------------------------------------------- | | account | 是 | Str | 账号 | | g_id | 是 | Str | 游戏 ID | | s_id | 是 | Str | 服务器 ID | | op_id | 是 | Str | 渠道 ID | | msg_id | 是 | Str | 本地通信的消息 ID,用于分辨每次通信接口,写死9 |
#### 游戏登录(必接) > 游戏登录成功后,游戏返回的状态,是为了微端本地记录游戏的状态,方便管理游戏 **通信方式:** 微端发送给游戏的(TCP) **加密方式:** AES **数据格式:** JSON **参数内容:** | 参数名 | 必选 | 类型 | 说明 | | :-------- | :--- | :--- | :-------------------------------------------- | | gta_id | 是 | Str | 每次启动 gta 的唯一 ID | | client_id | 是 | Str | 每一个游戏分配的通信 ID | | msg_id | 是 | Str | 本地通信的消息 ID,用于分辨每次通信接口,写死1 | | code | 是 | Str | 登录状态 | **返回结果** ``` { errcode: 1, // 0 表示登录成功,其他表示登录失败,并在 msg中返回登录失败详细原因 msg: "获取成功", // 成功、失败信息 data:[{ "account": "帐号", // 帐号 "g_id": 9, // 游戏 ID "s_id": "1308440003", // 服务器ID "op_id": 503, // 渠道 ID "gta_id": "1212",// 每次启动 gta的唯一 ID "client_id": "1", // 每一个游戏分配的通信 ID "msg_id": "1" //本地通信的消息 ID,用于分辨每次通信接口,写死1 }] } ``` 登录进游戏流程如下 ![img](/zh/docs/GT/game-access/pc-game/image/5ec671a3531e7.png)
## 后端接入 **返回示例** 由微端客户端请求并透传该返回值给游戏客户端,游戏客户端在登入游戏服之前进行二次校验,校验后以此account登入游戏服 ``` { code: 0, message: "success", data: { account: "0060015_1603261287587442417267131", //平台用户账号, 游戏方以此账号为准,登入游戏 game_id: 3000219,//游戏id game_name: "MU Legend", //游戏名 type: "micro",//游戏接入类型 time: 1608621455,//当前服务器时间戳 sign: "16f08edd1d703dcd16b52736d5215002",//校验签名,只有game_data字段不参与签名生成,其它返回的参数均参与签名,返回字段数不固定 game_data: { server_id: 2793420001, server_url: "xxx.24.112.xxx:1001", server_name: "QA测试服" } //返回登录游戏基本信息 } } ``` **备注** 1、sign加密方式: ```php public static function genVerify($data, $signKey) { ksort($data); $items = array(); foreach ($data as $key => $value) { $items[] = $key . "=" . $value; } return md5(join("&", $items) . $signKey); } ``` 通过以上加密函数,跟返回结果中的sign进行对比,一致则通过校验,加密$signKey在接入之前单独申请, 每个游戏单独生成。 2、接口信息有效性,建议5min以内,游戏根据time和签名sign自己实现 **返回参数说明** | 参数名 | 类型 | 说明 | | ------ | ------ | ---------------- | | code | int | 0,成功,其它失败 | | msg | string | 返回状态 | | data | array | 返回数据 |