《游戏用户登陆模块》

接入简介

游戏服务端必须在自己的服务器( 即下图的 GAME-SERVER )上搭建一个转发登陆验证请求服务,可以使用下面教程中的Demo,也可以自行开发。

登陆验证流程图

登陆流程
流程图说明: 游戏服务端需要关注的是4、7、8。

  1. 第一步: 游戏用户输入用户名和密码后,渠道SDK完成向 SDK-SERVER 请求token的流程。
  2. 第二步: SDK-SERVER 完成游戏用户认证后,返回游戏用户的token和其他信息。
  3. 第三步: AnySDK Framework 向 GAME-SERVER 发送登陆验证请求。
    (注意:以上三步都是由 AnySDK Framework 完成的,不需要开发者再写代码)
    你只需要将下面第四步搭建好的地址提供给客户端人员 。

  4. 第四步: GAME-SERVER 收到客户端请求过来的参数之后,将用户信息等参数再转发给 AnySDK Server (注:参考下面的 Demo 代码,千万不要写死转发参数的个数!)

  5. 第五步: AnySDK Server 向对应的 SDK-SERVER 发起用户登录验证请求。
  6. 第六步: SDK-SERVER 返回验证结果给 AnySDK Server。
  7. 第七步: AnySDK Server 按照统一格式返回给 GAME-SERVER。
    (注意:以上三步都是由 AnySDK Server 完成的,不需要开发者再写代码)

  8. 第八步: GAME-SERVER再返回通知 AnySDK 框架登录验证结果,并可以返回一些游戏逻辑相关的数据给游戏客户端
    (注:游服没有自定义逻辑处理或者数据返回,可直接使用第四步的demo就行)

  9. 最后,AnySDK Framework 执行登录回调函数来通知游戏客户端是否登陆成功

注:以上是通用流程,开发者有其他安全验证需求的,可以在第八步的返回数据时,在 ext 字段加入由游服生成的 SessionId,客户端可以从登录成功回调中获取此数据, 便可在和游戏服务端其他交互流程上携带SessionId进行安全验证需求。

接入细节

编码要求

服务端代码文件存储格式一律要使用 utf-8 without bom ,否则会出现数据编码错误,导致客户端解析数据失败的问题,可以使用 Notepad++ 进行转换

获取 Demo

服务端 Demo (包括 PHP、Java、Python、NodeJS 等语言)托管在 GitHub,请前往自取-> Sample_Server

GAME-SERVER要求

GAME-SERVER搭建的登陆验证服务,需要提供以下几个功能:

  1. 接收 AnySDK Framework 请求参数(预设 privateKey 及 AnySDK 统一登录验证地址)
  2. 检查 privatekey
  3. 向 AnySDK Server的登陆验证API 发起登录验证请求
  4. 接收验证结果并按照响应格式返回给客户端

AnySDK API地址

http://oauth.anysdk.com/api/User/LoginOauth/    (注意:HTTP 协议 POST 方法)

AnySDK 响应格式

AnySDK 统一登录验证获取的数据统一以 json 格式返回,其中包含 statusdatacommonext 四个子域部分

  1. status:用于表达验证请求成功与否
  2. data:保存渠道平台返回的验证信息(此部分数据的格式根据不同渠道的实现不同而有所差异,有些渠道会返回较多的用户信息数据,有些渠道只会返回校验结果,AnySDK 返回这些数据是为了能让游戏服务器获取到所有的原始验证信息,开发者可以使用这些数据,也可以直接忽略掉这部分数据,也不会影响接入)
  3. common:包含渠道编号、渠道 SDK 标识,渠道返回的用户 UserId(渠道唯一),以及用户登录前选择的游戏服务器 ID (此数据只有当客户端调用带 ServerId 的重载登录函数时才会有值,否则默认为空),开发者请使用此部分统一数据作为用户数据。
  4. 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请求
...