Skip to content

客户端平台验证

客户端平台验证

1. 获取区列表

此协议是为可选协议,可通过dorequest-zone-list请求区列表;

1.1 访问地址

请求地址

地址类型 地址
测试地址 http://login.bwgame.com.cn:7000/httplogin

返回地址

地址类型 地址
测试地址 http://login.bwgame.com.cn:7000/httplogin

1.2 协议说明

发送协议

do:"request-zone-list"
data: 序列成json

message request-zone-list
{
    required  uint32  gameid =1;
}

返回协议

do:"request-zone-list"
data: 序列成json

enum ZoneState
{
    ShutDown  = 0;  // 关闭状态ZoneState_Shutdown  
    Normal    = 1;  // 正常运行ZoneState_Normal  
    Fully     = 2;  // 爆满ZoneState_Fullly  
    Starting  = 3;  // 正在启动ZoneState_Starting  
}

message ZoneInfo
{
    required   uint32   zoneid = 1;
    required  string  zonename = 2;
    required  ZoneState  state = 3;
}
message return_zone_list
{
    required  string  gamename   = 1;
    required  uint32  gameid     = 2;
    repeated  ZoneInfo zonelist  = 3;
}

1.3 格式样例

Send:

    ToUrl: http://login.bwgame.com.cn:7000/httplogin

    {
        "do" : "request-zone-list",
        "data" : {
            "gameid" : 170
        },
    }

Recv:

    FromUrl: http://login.bwgame.com.cn:7000/httplogin  
    {
        "data" : {
            "gameid" : 170,
            "gamename" : "slot",
            "zonelist" : [{
                    "state" : 1,
                    "zoneid" : 301,
                    "zonename" : "slot301"
                }, {
                    "state" : 0,
                    "zoneid" : 302,
                    "zonename" : "slot302"
                }, {
                    "state" : 0,
                    "zoneid" : 303,
                    "zonename" : "slot303"
                }
            ]
        },
        "do" : "request-zone-list",
        "errno" : "0",
    }

2. 获取token

此协议是玩家首次进入游戏,或者当token过期时,需要重新验证进入游戏时调用。
客户端验证与申请token:
1. 当token过期;
2. token或签名不对;
3. 玩家登陆验证时;
4. 新玩家进入游戏需要申请帐号时;

2.1 访问地址

请求地址

地址类型 地址
测试地址 http://login.bwgame.com.cn:7000/httplogin

返回地址

地址类型 地址
测试地址 http://login.bwgame.com.cn:7000/httplogin

2.2 协议说明

请求协议

do:"plat-token-login"
data: 序列成json
message PlatInfo
{
    required string account     = 1;        // 用户账号。platid为PlatType_Normal时,account可以缺省为客户端机器码
    required PlatType platid    = 2;        // 平台id
    optional string email       = 3;        // email
    optional string gender      = 4;        // 性别
    optional string nickname    = 5;        // 昵称
    optional string timestamp   = 6;        // 时间戳
    optional string sign        = 8;        // 平台签名串
    optional string faceurl     = 10;       // 平台头像
    optional string extdata     = 11;       // 增加一个扩展字段,特殊平台自行组装json
    optional string uid         = 12;       // 平台id(兼容老的处理方式)
    optional uint32 imei        = 13;       // 客户端机器码
    optional string osname      = 14;       // 系统名称 
}
message request-plat-token-login
{
    required  PlatInfo  platinfo = 1;
    required  uint32    gameid   = 2;
}

返回协议

do:"request-zone-list"
data: 序列成json
message return-plat-token-login
{

    optional PlatInfo platinfo = 1;                 // 平台用户信息
    required string uid  = 3;                   // 可唯一代表一个用户身份的ID,由平台统一生成
    required string sid = 4;                        // 组合字段:<平台id>::<平台账户>
    required string unigame_plat_key = 5;           // 平台登录密钥,用于上行消息URL签名
    required string unigame_plat_login = 6;         // 平台登录token,用于上行消息
    required uint32 unigame_plat_login_life = 7;    // 平台登录token从现在开始多少秒后过期,过期后或服务器返回HttpReturnCode_SignError时客户端需要重新走登陆流程
    optional string timezone_name = 8;              // 时区的名字
    required int32 timezone_offset = 9;             // unilight服务器时区相对于UTC的时间偏移量,单位秒
}

2.3 格式样例

Send:

    ToUrl: http://login.bwgame.com.cn:7000/httplogin

    {
        "do" : "plat-token-login",
        "data" : {
            "platinfo" : {
                "account" : null,
                "email" : null,
                "platid" : "67",
                "gender" : null,
                "nickname" : null,
                "timestamp" : "1441164450",
                "uid" : "1000004",
                "sign" : "ab8af8aae7b0266e724b7e5c40372d41",
                "gameid" : "170"
            },
            "gameid" : 170
        },
        "gameid" : 170,
        "zoneid" : 301,
        "unigame_plat_timestamp" : 1441164420106
    }

ps: do, data, gameid,zonid unigame_plat_timestamp,是并列的,注意json的嵌套关系及字段类型

其中,platinfo字段: * 当platid != 0 时,表示第三方渠道,platinfo是转发给SDK去验证; * 当platid == 0时,表示本平台官方登陆,会通过platinfo中的platid,及account来验证并生成对应的uid

Recv:


    FromUrl: http://login.bwgame.com.cn:7000/httplogin

    {
        "data" : {
            "gameid" : 170,
            "platinfo" : {
                "account" : null,
                "email" : null,
                "gameid" : "170",
                "gender" : null,
                "nickname" : null,
                "platid" : "67",
                "sign" : "ab8af8aae7b0266e724b7e5c40372d41",
                "timestamp" : "1441164450",
                "uid" : "1000004"
            },
            "sid" : "67::1000004",
            "uid" : "1000103"
            "unigame_plat_key" : "219f14fefdf7b9461217e3311137c5b1",
            "unigame_plat_login" : "1956acba356e9bb3347df6592f3450e0-1441164461",
            "unigame_plat_login_timeout" : "86400",
            "unigame_plat_timestamp" : 1441164420106,
        },
        "do" : "plat-token-login",
    }

3. 选区

这是玩家进入游戏引用签名机制时,必须调用的协议机制。此协议主要功能:
1. 实现此玩家进入游戏的区ID选定
2. 通过unilight及网关有玩家进入,并且同步相应token信息
3. token是否过期及签名是否合法性验证
当以上消息正确返回后,会返回相应的网关地址。

是否必须:是

是否需要签名:是

其中签名计算:

  url += "?smd=md5&sign=" + MD5(str + this.SID);
  url += "&unigame_plat_sign=" + MD5(str + time.toString() + this.PlatKey);

3.1 访问地址

请求地址

地址类型 地址
测试地址 http://login.publish.bwgame.com.cn:7000/httplogin?smd=md5&sign=db20550d9983e0e29ac6acd185e6c3f5&unigame_plat_sign=9c2b65032da3bd155fb23e3a29e4399b

返回地址

地址类型 地址
测试地址 http://login.publish.bwgame.com.cn:7000/httplogin?smd=md5&sign=db20550d9983e0e29ac6acd185e6c3f5&unigame_plat_sign=9c2b65032da3bd155fb23e3a29e4399b

3.2 协议说明

请求协议

do:"request-select-zone"
data: 序列成json
message 
{ 
  required   uint32   zoneid     = 1;
  required   uint32   gameid     = 2;
}
uid:值为“2.2 协议说明”中返回协议中的uid
unigame_plat_login:值为“2.2 协议说明”中返回协议中的unigame_plat_login
unigame_plat_timestamp: 客户端当前时间戳(s)

返回协议

do:"request-select-zone"
data: 序列成json
message 
{ 
    required uint64 accountid       = 1;    // 账号
    optional uint64 logintempid     = 2;    // 生成一个临时编号,用于校验,登陆网关时传上去
    optional uint64 tokenid         = 3;    // 随机token
    optional string gatewayurl      = 4;    // 登陆的网关地址,接下来断开连接后马上登陆这个地址
    optional uint32 gameid          = 5;    // 游戏编号
    optional uint32 zoneid          = 6;    // 区编号
    optional bool   separatezoneuid = 7;
    optional string zoneuid         = 8;
    optional string gatewayurltcp   = 9;    // 登陆的网关地址tcp,
}
uid:值为“2.2 协议说明”中返回协议中的uid
unigame_plat_login:值为“2.2 协议说明”中返回协议中的unigame_plat_login
unigame_plat_timestamp: 客户端当前时间戳(s)

3.3 格式样例

Send:

    ToUrl: http://login.publish.bwgame.com.cn:7000/httplogin?smd=md5&sign=db20550d9983e0e29ac6acd185e6c3f5&unigame_plat_sign=9c2b65032da3bd155fb23e3a29e4399b

    {
        "do" : "request-select-zone",
        "data" : {
            "gameid" : 170,
            "zoneid" : 301
        },
        "uid" : "1000103",
        "unigame_plat_login" : "1956acba356e9bb3347df6592f3450e0-1441164461",
        "unigame_plat_timestamp" : 1441164420215
    }

Recv:

    FromUrl: http://login.publish.bwgame.com.cn:7000/httplogin?smd=md5&sign=db20550d9983e0e29ac6acd185e6c3f5&unigame_plat_sign=9c2b65032da3bd155fb23e3a29e4399b

    {
        "data" : {
            "gameid" : 170,
            "gatewayurl" : "http://114.119.6.83:7001/shen/user/http",
            "zoneid" : 301
        },
        "do" : "request-select-zone",
        "errno" : "0",
        "gameid" : 170,
        "st" : 1441164462,
        "uid" : "1000103",
        "unigame_plat_login" : "1956acba356e9bb3347df6592f3450e0-1441164461",
        "unigame_plat_timestamp" : 1441164420215,
        "zoneid" : 301
    }

4. HTTP与lua游戏逻辑通讯实例

当切换到网关时与逻辑服之前的游戏业务的签名实例。

4.1 访问地址

请求地址

地址类型 地址
测试地址 http://114.119.6.83:7001/shen/user/http?smd=md5&sign=a277284d142cc2389da375aad6af71a6&unigame_plat_sign=1dce75f6d81b963a77a4139d0edafd8d

4.2 格式样例

Send:

    ToUrl: http://114.119.6.83:7001/shen/user/http?smd=md5&sign=a277284d142cc2389da375aad6af71a6&unigame_plat_sign=1dce75f6d81b963a77a4139d0edafd8d

    {
        "do" : "Cmd.LoginThird_C",
        "data" : {
            "uid" : "1000103",
            "platInfo" : {
                "account" : null,
                "email" : null,
                "gameid" : "170",
                "gender" : null,
                "nickname" : null,
                "platid" : "67",
                "sign" : "ab8af8aae7b0266e724b7e5c40372d41",
                "timestamp" : "1441164450",
                "uid" : "1000004"
            }
        },
        "uid" : "1000103",
        "gameid" : 170,
        "zoneid" : 301,
        "unigame_plat_login" : "1956acba356e9bb3347df6592f3450e0-1441164461",
        "unigame_plat_timestamp" : 1441164420481
    }