# 游戏登录 ## 文档说明 本文档为手游接入登录模块提供指引,游戏登录是玩家在GTarcade平台进入游戏服务器的唯一入口。 ## 前端接入 ### 进游戏 >主要是为了拉起游戏进程,给游戏方传输相关的参数 + 游戏接入前需要在游戏中心提前配置,可以联系微端运营同学帮忙配置。 **通信方式:** 启动游戏进程微端传给游戏前端的参数 **参数内容:** | 参数名 | 必选 | 类型 | 说明 | | :----------- | :--- | :--- | -------------------------------------- | | account | 是 | Str | 账号 | | g_id | 是 | Str | 游戏 ID | | s_id | 是 | Str | 服务器 ID | | op_id | 是 | Str | 渠道 ID | | port_id | 是 | Str | 端口号 | | LanguageType | 否 | Str | 语言类型 | | other | 否 | Str | 如果游戏放需要更多参数,可根据需求补充 | 语言对应字段 zh_CN=简体中文 zh_TW=繁体中文 ar=阿拉伯语 es=西班牙语 en=英语 id=印尼语 it=意大利语 de=德语 pl=波兰语 th=泰语 tr=土耳其语 ru=俄语 pt=葡萄牙语 fr=法语 jp=日语 kr=朝鲜语、韩语 vi=越南语 + 登录进游戏流程如下 ![](/zh/docs/GT/image/5ec671a3531e7.png)
### 关联请求 >主要是为了微端精准的识别每一个游戏,防止用户在平台打开多个游戏时,相互之间的通信不会出现错误 **通信方式:** 游戏传给微端的参数(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", //平台用户账号, 游戏方以此账号为准,登入游戏,跟supersdk登入账号保持一致 game_id: 182,//游戏id game_name: "legacy of discord", //游戏名 type: "micro",//游戏接入类型 time: 1608621455,//当前服务器时间戳 sign: "16f08edd1d703dcd16b52736d5215002",//校验签名,只有game_data字段不参与签名生成,其它返回的参数均参与签名,返回字段数不固定 game_data: { ip: "61.174.15.246", //客户端ip country_code: "CN", //国家 continent_code: "AP", //地区 osdk_ticket: "eyJvc2RrX2dhbWVfaWQiOjQwOCwidXNlcl9pZCI6InZ4eXdhbmdAZ21haWwuY29tIiwibG9naW5fc2RrX25hbWUiOiJtaWNybyIsImFjY291bnRfc3lzdGVtX2lkIjoiMDA2MDAxNSIsIm9zZGtfdXNlcl9pZCI6IjAwNjAwMTVfdnh5d2FuZ0BnbWFpbC5jb20iLCJjaGFubmVsX2lkIjoyNzI4LCJleHRlbmQiOiIiLCJ0aW1lIjoxNjI1NDcyODM1LCJpcCI6IjYxLjE3NC4xNS4yNDYiLCJzaWduIjoiMWJmMDFmNGJiZTE1ZDQ0MzAzOTEzMjhlNTgyOTBkYTcifQ==" //兼容supersdk ticket }//如有特殊需求可使用透传参数 } } ``` **数据有效性校验** **校验支持2种方式,2选1:** **方式1:** 校验sign,只有game_data字段不参与签名生成,其它返回的参数均参与签名,返回字段数不固定 加密方式: 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在接入之前单独申请, 每个游戏单独生成, 登录账号采用account字段值; **方式2:** 如已接入supersdk,可校验game_data里的osdk_ticket ,生成和解析规则通supersdk,请参考supersdk 文档-osdk_ticket 解析算法: [SuperSDK服务端接口文档](http://docs.supersdk.cn/zh/docs/%E6%8E%A5%E5%85%A5%E6%96%87%E6%A1%A3/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8E%A5%E5%85%A5%E6%96%87%E6%A1%A3/docs/server.md "SuperSDK服务端接口文档") 私钥由微端侧分配,接入前先找微端开发申请获取私钥,登录账号使用经解密算法校验通过后的得到的osdk_user_id值; **接口实效性:** 接口信息有效性,建议5min以内 **返回参数说明** |参数名|类型|说明| |:----- |:-----|----- | |code |int |0,成功,其它失败 | |msg |string |返回状态 | |data |array |返回数据 |