《游戏用户登陆模块》
接入简介
游戏服务端必须在自己的服务器( 即下图的 GAME-SERVER )上搭建一个转发登陆验证请求服务,可以使用下面教程中的Demo,也可以自行开发。
登陆验证流程图
流程图说明: 游戏服务端需要关注的是4、7、8。
- 第一步: 游戏用户输入用户名和密码后,渠道SDK完成向 SDK-SERVER 请求token的流程。
- 第二步: SDK-SERVER 完成游戏用户认证后,返回游戏用户的token和其他信息。
-
第三步: AnySDK Framework 向 GAME-SERVER 发送登陆验证请求。
(注意:以上三步都是由 AnySDK Framework 完成的,不需要开发者再写代码)
你只需要将下面第四步搭建好的地址提供给客户端人员 。 -
第四步: GAME-SERVER 收到客户端请求过来的参数之后,将用户信息等参数再转发给 AnySDK Server (注:参考下面的 Demo 代码,千万不要写死转发参数的个数!)
- 第五步: AnySDK Server 向对应的 SDK-SERVER 发起用户登录验证请求。
- 第六步: SDK-SERVER 返回验证结果给 AnySDK Server。
-
第七步: AnySDK Server 按照统一格式返回给 GAME-SERVER。
(注意:以上三步都是由 AnySDK Server 完成的,不需要开发者再写代码) -
第八步: GAME-SERVER再返回通知 AnySDK 框架登录验证结果,并可以返回一些游戏逻辑相关的数据给游戏客户端
(注:游服没有自定义逻辑处理或者数据返回,可直接使用第四步的demo就行) - 最后,AnySDK Framework 执行登录回调函数来通知游戏客户端是否登陆成功
注:以上是通用流程,开发者有其他安全验证需求的,可以在第八步的返回数据时,在 ext 字段加入由游服生成的 SessionId,客户端可以从登录成功回调中获取此数据, 便可在和游戏服务端其他交互流程上携带SessionId进行安全验证需求。
接入细节
编码要求
服务端代码文件存储格式一律要使用 utf-8 without bom ,否则会出现数据编码错误,导致客户端解析数据失败的问题,可以使用 Notepad++ 进行转换
获取 Demo
服务端 Demo (包括 PHP、Java、Python、NodeJS 等语言)托管在 GitHub,请前往自取-> Sample_Server
GAME-SERVER要求
GAME-SERVER搭建的登陆验证服务,需要提供以下几个功能:
- 接收 AnySDK Framework 请求参数(预设 privateKey 及 AnySDK 统一登录验证地址)
- 检查 privatekey
- 向 AnySDK Server的登陆验证API 发起登录验证请求
- 接收验证结果并按照响应格式返回给客户端
AnySDK API地址
http://oauth.anysdk.com/api/User/LoginOauth/ (注意:HTTP 协议 POST 方法)
AnySDK 响应格式
AnySDK 统一登录验证获取的数据统一以 json 格式返回,其中包含 status、data、common、ext 四个子域部分
- status:用于表达验证请求成功与否
- data:保存渠道平台返回的验证信息(此部分数据的格式根据不同渠道的实现不同而有所差异,有些渠道会返回较多的用户信息数据,有些渠道只会返回校验结果,AnySDK 返回这些数据是为了能让游戏服务器获取到所有的原始验证信息,开发者可以使用这些数据,也可以直接忽略掉这部分数据,也不会影响接入)
- common:包含渠道编号、渠道 SDK 标识,渠道返回的用户 UserId(渠道唯一),以及用户登录前选择的游戏服务器 ID (此数据只有当客户端调用带 ServerId 的重载登录函数时才会有值,否则默认为空),开发者请使用此部分统一数据作为用户数据。
- ext:默认为空,游戏服务器可以在 ext 域中存放游戏逻辑相关的数据(比如开发商服务器内部设定用户标识),这些数据会在游戏客户端获取到登录成功回调时附带的 msg 信息里完整的拿到,然后用来执行相应的游戏逻辑;
成功返回示例(以 360 为例):
{
"status":"ok",
"data":
{
"id":"18135798",
"name":"\u6b27\u9ea6\u560e\u5730",
"avatar":"http:\/\/u1.qhimg.com\/qhimg\/quc\/48_48\/22\/02\/55\/220255dq9816.3eceac.jpg?f=6c449fbaaa093e52b4053e46170af079",
"sex":"\u672a\u77e5",
"area":"",
"nick":""
},
"common":
{
"channel":"000023",
"user_sdk":"360",
"uid":"18135798",
"server_id":"1",
"plugin_id":"12"
},
"ext":""
}
失败返回示例
{
"status":"fail",
"data":
{
"error":"login_check_fail",
"error_no":"20002"
},
"sn":"error_log_serial_num"
}
H5游戏的特殊处理
H5 游戏的GAME-SERVER在接入用户登陆模块的时候,GAME-SERVER在转发请求时需要往请求参数里面加入 private_key 参数及其参数值。
<?php
define('ANYSDK_PRIVATE_KEY', 'xxxprivate_keyxxx');
...
// 接收请求参数
$params = $_REQUEST;
// 往请求参数增加private_key,这一步要在发起http请求之前
$params['private_key'] = ANYSDK_PRIVATE_KEY;
// 发起http请求
...