# 游戏登录
## 文档说明
本文档为游戏接入登录模块提供指引,游戏登录是玩家在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
}]
}
```
登录进游戏流程如下

## 后端接入
**返回示例**
由微端客户端请求并透传该返回值给游戏客户端,游戏客户端在登入游戏服之前进行二次校验,校验后以此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 | 返回数据 |