客户端平台验证
客户端平台验证
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
}