Skip to content

《Unilight平台接入》协议文档

协议说明

LoginUrl客户端请求时:
1) 响应超时,超时时间为15秒;
2) 网络断开情况的处理:点击后刷新游戏
服务端回调数据:
http/websocket暂时采用json数据格式,考虑移动端节约流量,兼顾可读性,尽量使用2-3个字符表示,并且写明全称或描述。

声明

LoginUrl 登陆服务器URL
gatewayurl 网关服务器URL
Action http请求URL地址
URL+["?unigame_plat_sign="+MD5(msg+time+platKey)]+["?compress="+Pmd.CompressType] 注: 可选参数unigame_plat_sign,当获取到plat_token后使用
可选参数compress 需要开启数据压缩模式时使用,使用此参数时发送和接收的数据为二进制格式utf-8字符串。压缩类型可参考Pmd.CompressType

关键字

为了保持响应数据(data)中相同意义的字段的命名统一性,请使用下面关键字
errno 平台状态返回码 gameid 游戏ID
zoneid 区服ID resultCode 游戏状态返回码

1. 平台接入(http)

请求 Action LoginUrl+["?compress="+ Pmd.CompressType]
请求 Example http://server.login.bwgame.com.cn:7000/httplogin?compress=gzip
请求 msg 字段 类型 默认值 描述
请求 msg do String request-zone-list 请求区列表
请求 msg gameid Int 游戏ID
请求 msg data 字段 类型 默认值
请求 msg data gameid Int 游戏ID
响应 字段 类型 默认值 描述
响应 errono Int 0 状态码
响应 gameid Int 游戏ID
响应 do String request-zone-list 请求区列表
响应 data 字段 类型 默认值
响应 data gamename 游戏名称
响应 data zonelist {"state": 0, "zoneid": 301, "zonename": "老虎机301"} 区列表
响应 data gameid Int 游戏ID
样例:
SEND:
{
"do": "request-zone-list",
"data": {
"gameid": 170
},
"gameid": 170,
"unigame_plat_timestamp": 1445390145867
}
RECV:
{
"data": {
"gameid": 170,
"gamename": "老虎机",
"zonelist": [
{
"state": 0,
"zoneid": 301,
"zonename": "老虎机301"
},
{
"state": 1,
"zoneid": 302,
"zonename": "老虎机302"
}
]
},
"do": "request-zone-list",
"errno": "0",
"gameid": 170,
"st": 1445390168,
"unigame_plat_timestamp": 1445390145867
}

1.2平台账号注册

请求 Action LoginUrl+["?compress="+ Pmd.CompressType]
请求 Example http://server.login.bwgame.com.cn:7000/httplogin?compress=gzip
请求 msg 字段 类型 默认值 描述
请求 msg do String plat-token-login 请求命令
请求 msg gameid Int 游戏ID
请求 msg zoneid Int 区服ID
请求 msg data Pmd.ThirdPlatLoginUserPmd_C 请求数据
响应 字段 类型 默认值 描述
响应 errono Int 0 状态码
响应 gameid Int 游戏ID
响应 zoneid Int 区服ID
响应 uid String 用户ID
响应 do String 操作命令
响应 unigame_plat_key String 平台登录密钥
响应 unigame_plat_login String 平台登录token
响应 unigame_plat_login_timeout String 平台登录token过期时间
响应 unigame_plat_timestamp String 平台时间戳(暂时未使用)
响应 data Pmd.ThirdPlatLoginUserPmd_S
样例:
SEND:
"do": "plat-token-login",
"data": {
"platinfo": {
"account": null,
"email": null,
"platid": "69",
"gender": null,
"nickname": null,
"timestamp": "1445350704",
"uid": "e63541fcb17e150369ea679ca7039617",
"sign": "8a79b902301acf99564ffc67d6cba12e",
"gameid": "170",
"faceurl": null
},
"gameid": 170
},
"gameid": 170,
"zoneid": 301,
"unigame_plat_timestamp": 1445350889429
}
RECV:
{
    "data": {
        "gameid": 170,
        "platinfo": {
            "account": null,
            "email": null,
            "faceurl": null,
            "gameid": "170",
            "gender": null,
            "nickname": null,
            "platid": "69",
            "sign": "8a79b902301acf99564ffc67d6cba12e",
            "timestamp": "1445350704",
            "uid": "e63541fcb17e150369ea679ca7039617"
        },
        "sid": "69::e63541fcb17e150369ea679ca7039617",
        "uid": "1000375"
    },
    "do": "plat-token-login",
    "gameid": 170,
    "unigame_plat_key": "326020f1d713db47330b423f2577ffc9",
    "unigame_plat_login": "83c642b96ce868c88fd8037c5f9e1633-1445350752",
    "unigame_plat_login_timeout": "2592000",
    "unigame_plat_timestamp": 1445350889429,
    "zoneid": 301
}

1.3平台账号注册

请求 Action LoginUrl+"?unigame_plat_sign="+MD5(msg+ unigame_plat_timestamp+unigame_plat_key)+["&compress="+ Pmd.CompressType]
请求 Example http://login.publish.bwgame.com.cn:7000/httplogin? unigame_plat_sign=b6cc00a86dbd00b687d287b737e5e765
请求 msg 字段 类型 默认值 描述
请求 msg do String request-select-zone 选区请求
请求 msg gameid Int 游戏ID
请求 msg zoneid Int 区服ID
请求 msg uid String 用户ID
请求 msg unigame_plat_login String 1.2步骤请求得到的返回值unigame_plat_login token
请求 msg unigame_plat_timestamp Int 当前时间毫秒
请求 msg data 字段 类型 默认值
请求 msg data gameid Int
请求 msg data zoneid Int
响应 字段 类型 默认值 描述
响应 errono Int 0 状态码
响应 do String request-select-zone
响应 gameid
响应 zoneid
响应 uid String 字符串
响应 st Int
响应 unigame_plat_login
响应 unigame_plat_timestamp
响应 data 字段 类型 默认值
响应 data gameid Int 游戏ID
响应 data gatewayurl String 网关URL
响应 data zoneid Int 区服URL
样例:
SEND:
{
"do": "request-select-zone",
"data": {
"gameid": 170,
"zoneid": 301
},
"uid": "1000375",
"gameid": 170,
"zoneid": 301,
"unigame_plat_login": "83c642b96ce868c88fd8037c5f9e1633-1445350752",
"unigame_plat_timestamp": 1445350889663
}
RECV:
{
"data": {
"gameid": 170,
"gatewayurl": "http://114.119.6.83:7001/shen/user/http",
"zoneid": 301
},
"do": "request-select-zone",
"errno": "0",
"gameid": 170,
"st": 1445350753,
"uid": "1000375",
"unigame_plat_login": "83c642b96ce868c88fd8037c5f9e1633-1445350752",
"unigame_plat_timestamp": 1445350889663,
"zoneid": 301
}

1.4发送普通http请求

请求 gatewayurl+"?unigame_plat_sign="+MD5(msg+ unigame_plat_timestamp+unigame_plat_key)+["&compress="+Pmd.CompressType]
请求 Example http://login.publish.bwgame.com.cn:7000/httplogin? unigame_plat_sign=b6cc00a86dbd00b687d287b737e5e765
请求 msg 字段 类型 默认值 描述
请求 msg do String 游戏请求
请求 msg gameid Int 游戏ID
请求 msg zoneid Int 区服ID
请求 msg uid String 用户ID
请求 msg unigame_plat_login String 1.2步骤请求得到的返回值unigame_plat_login 用户ID
请求 msg unigame_plat_timestamp Int 当前时间毫秒
请求 msg data Object Json消息
响应 字段 类型 默认值 描述
响应 errono Int 0 状态码
响应 do String 协议名称
响应 gameid
响应 zoneid
响应 uid String 字符串
响应 st Int
响应 data Object
样例:
SEND:
{
"do": "Cmd.LoginThird_C",
"data": {
"uid": "1000375",
"platInfo": {
"account": null,
"email": null,
"faceurl": null,
"gameid": "170",
"gender": null,
"nickname": null,
"platid": "69",
"sign": "8a79b902301acf99564ffc67d6cba12e",
"timestamp": "1445350704",
"uid": "e63541fcb17e150369ea679ca7039617"
}
},
"uid": "1000375",
"gameid": 170,
"zoneid": 301,
"unigame_plat_login": "83c642b96ce868c88fd8037c5f9e1633-1445350752",
"unigame_plat_timestamp": 1445350890271
}
RECV:
{
"errno": "0",
"st": 1445350753,
"data": {
"resultCode": 0,
"uid": 1000375,
"errno": "0",
"userInfo": {
"username": "1000375",
"headurl": "http://h5.publish.bwgame.com.cn/SuperSlot/avar.png",
"platid": 69,
"plataccount": "1000375",
"passwd": "123456",
"chips": 7516,
"gender": "男",
"email": "123@qq.com"
}
},
"do": "Cmd.Login_S"
}

2.开启长连接(webSocket)

2.1Http请求开启长连接

请求 Action gatewayurl+"?unigame_plat_sign="+MD5(msg+ unigame_plat_timestamp+unigame_plat_key)+["&compress="+Pmd.CompressType]
请求 Example http://login.publish.bwgame.com.cn:7000/httplogin? unigame_plat_sign=b6cc00a86dbd00b687d287b737e5e765
请求 msg 字段 类型 默认值 描述
请求 msg do String Pmd.WebSocketForwardUserPmd_C 打开长链接
请求 msg gameid Int 游戏ID
请求 msg zoneid Int 区服ID
请求 msg uid String 用户ID
请求 msg unigame_plat_login String 1.2步骤请求得到的返回值unigame_plat_login
请求 msg unigame_plat_timestamp Int 当前时间毫秒
请求 msg data Pmd.WebSocketForwardUserPmd_C
响应 字段 类型 默认值 描述
响应 errono Int 0 状态码
响应 do String Pmd. WebSocketForwardUserPmd_S 请求开启长连接成功
响应 gameid 游戏ID
响应 zoneid 区服ID
响应 uid String 用户ID
响应 st Int 用户信息
响应 unigame_plat_login oken
响应 unigame_plat_timestamp 过期时间
响应 data 字段 类型 默认值
响应 data gameid Int 游戏ID
响应 data gatewayurl String 网关URL
响应 data zoneid Int 区服URL
样例:
SEND:
{
"do": "Pmd.WebSocketForwardUserPmd_C",
"data": {
"accountid": 1040039
},
"uid": "1040039",
"gameid": 170,
"zoneid": 304,
"unigame_plat_login": "4e75dec0cacda5130a3a4355a1efef88-1445337885",
"unigame_plat_timestamp": 1445394179814
}
RECV:
{
"errno": "0",
"st": 1445394202,
"do": "Pmd.WebSocketForwardUserPmd_S",
"data": {
"zoneid": 304,
"tokenid": 1445394202878,
"gatewayurl": "ws://14.17.104.56:7001/shen/user",
"errno": "0",
"accountid": 1040039,
"gameid": 170,
"logintempid": 0
}
}

2.2 WS登录长连接

本步骤只能在2.1步骤成功之后开始,首先建立websocket,url连接地址为:     
2.1步骤获取的gatewayurl+”/json”。Websocket建立成功后开始下面的ws登录验证步骤。
  • 请求
字段 类型 描述
cmd_name String Pmd.UserLoginTokenLoginUserPmd_C
data Pmd.UserLoginTokenLoginUserPmd_C
- 成功响应
字段 类型 描述
cmd_name String Pmd.UserLoginReturnOkLoginUserPmd_S
data Pmd.UserLoginReturnOkLoginUserPmd_S
- 失败响应
字段 类型 描述
cmd_name String Pmd.UserLoginReturnFailLoginUserPmd_S
data Pmd.UserLoginReturnFailLoginUserPmd_S
- 用户被踢下线相应
字段 类型 描述
cmd_name String Pmd.ReconnectKickoutLoginUserPmd_S
data Pmd. ReconnectKickoutLoginUserPmd_S

备注(协议部分)

1.1.压缩枚举

Pmd.CompressType 枚举

字段 类型 说明 描述
gzip String Gzip压缩
flate String Flate压缩
zlib String zLib压缩
lzw String Lzw压缩
## 1.2.第三方平台用户信息
### Pmd.PlatInfo
---- ---- ---- ----
字段 类型 说明 描述
account int 账号
email int email
faceurl int 头像
gameid int 游戏id
gender int 第三方平台性别
nickname int 第三方平台昵称
platid int 平台id
sign String 登陆签名
timestamp String 登陆时间戳
uid String 第三方平台用户id
## 1.3.平台注册登录请求协议
### Pmd.ThirdPlatLoginUserPmd_C
---- ---- ---- ----
字段 类型 说明 描述
platinfo Pmd.PlatInfo 第三方平台用户ID
gameid Int 游戏ID
## 1.4.平台注册登录返回协议
### Pmd.ThirdPlatLoginUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
platinfo Pmd.PlatInfo 第三方平台用户ID
gameid Int 游戏ID
uid String 用户ID
sid String 用户唯一标识符 Platid+’:’+[username
## 1.5.http开启WS
### Pmd.WebSocketForwardUserPmd_C
---- ---- ---- ----
字段 类型 说明 描述
platinfo Pmd.PlatInfo 第三方平台用户ID
gameid Int Flate压缩
## 1.6.http开启WS成功
### Pmd.WebSocketForwardUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
gatewayurl String 网关url
accountid Int 账号id
logintempid Int 账号id
## 1.7. http开启WS失败
### Pmd.UserLoginReturnFailLoginUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
desc http开启失败描述
## 1.8.WS登陆
### Pmd.UserLoginReturnOkLoginUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
gameid int 游戏id
zoneid int 区服id
logintempid int 2.1步骤成功返回得到的logintempid
timestamp int 当前时间毫秒数
tokenmd5 String accounted、logintempid、timestamp、platkey按顺序字符串拼接的md5值
MD5(String(accountid)+String(logintempid)+String(timestamp)+platkey)
accountid int 2.1步骤成功返回得到的accountid
## 1.9. WS登陆成功
### Pmd.UserLoginReturnOkLoginUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
## 1.10.WS登陆失败
### Pmd.UserLoginReturnFailLoginUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
desc String Ws登录失败详情
retcode String 返回码
## 1.11.WS被踢下线
### Pmd.ReconnectKickoutLoginUserPmd_S
---- ---- ---- ----
字段 类型 说明 描述
desc int 被踢下线详细