-
Notifications
You must be signed in to change notification settings - Fork 577
AccountServer
此章节介绍如何使用账号登陆服务器
目前只提供IIS站点方式部署,去掉d=xxx格式的参数(与游戏参数不同之处)。
-
客户端发送Passport命令,获取账号,如果IMEI为空则获取新的账号和随机密码,不为空获取上次已注册的账号;
-
如果是游客登录,客户端需要保存账号和随机密码,并发送Login命令获取Token登录凭证;
-
如果是正常用户,客户端需要提示用户输入密码,并发送Regist命令完成注册并获取Token登录凭证;
-
接着使用Token登录凭证访问GameServer游戏服务器,验证成功后进入游戏;
使用Http的get方式请求,服务器以Handler参数分发请求(同游戏服务器的ActionId,这里可以是String类型),其中Sign签名参数必须要放在结尾(签名方式同游戏服一样)。
http://{Url}/?Handler={应用程序处理名称}&{query}&Sign=xxxxxx
- 示例
http://pass.scutgame.com/?Handler=Regist&MobileType=1&Pid=Z17465&Pwd=1234567&IMEI=xxxxxx&ScreenX=960&ScreenY=860&RetailID=0000&sign=a53c02c3189d59c3ef5a4c0d0c96faec
使用Json格式响应请求,消息结构如下:
{
"StateCode": "{错误码}",
"StateDescription": "{错误描述}",
"Vesion": "{版本}",
"Handler": "{请求的应用程序处理名称}",
"Data":
{
"{这里是业务层的数据对象}"
}
}
- 示例
{
"StateCode": 0,
"StateDescription": "",
"Vesion": "1.0",
"Handler": "Validate",
"Data":
{
"Token": "3074e807e73c4a899facb455aab1725e",
"PassportId": "Z17465",
"UserId": 1973013
}
}
- 0:电脑PC
- 1:iPod
- 2:iPad
- 3:iPhone(越狱)
- 4:Phone
- 5:Android
- 6:Mac
- 7:WindowsPhone7
- 8:Unknow未知
- 0: OK,成功的
- 100:服务器异常
- 101:签名错误
- 102:无处理程序
- 103:密码错误
- 105:登录凭证无效
- 106: 登录凭证过期
客户端是不允许自定义账号的,统一由登录服务器系统自动分配账号。
应用程序处理名称:Passport
-
请求参数
- IMEI:String类型,手机设备识别码,可以为空;不为空时如果上次有注册过,返回上次使用的账号
-
响应参数
- PassportId:String类型,系统分配账号,如果已经使用IMEI获得过的,下发上次的账号
- Password:String类型,6位随机密码,如果已经使用IMEI获得过的,下发上次的
-
示例
请求:
http://pass.scutgame.com/?Handler=Passport&IMEI=00:02:32:65&sign=2bcc51b165368e139111914e12864a89
或
http://pass.scutgame.com/?Handler=Passport&IMEI=&sign=c519d93c5acb9c074086bc9df0c23285
响应:
{
"StateCode": 0,
"StateDescription": "",
"Vesion": "1.0",
"Handler": "Passport",
"Data":
{
"PassportId": "Z17465",
"Password": "564613"
}
}
应用程序处理名称:Login
-
请求参数
- MobileType:【必传】Int整型,手机类型
- Pid:【必传】String类型,获取账号接口下发的账号
- Pwd:【必传】String类型,获取账号接口下发的密码
- IMEI:String类型,手机设备识别码,可以为空;不为空时如果上次有注册过,返回上次使用的账号
- ScreenX:Int整型,手机屏幕宽度
- ScreenY:Int整型,手机屏幕高度
- RetailID:String类型,客户打包的渠道编号
-
响应参数
- Token:String类型,登录授权成功获得的凭证,有效期(24H)
- UserID:Int整型,用户的唯一编号
-
示例
请求:
http://pass.scutgame.com/?Handler=Login&MobileType=0&Pid=Z17465&Pwd=564613&IMEI=&ScreenX=&ScreenY&RetailID=&sign=c792a4eb8a7761524ea6e512f0efc939
响应:
{
"StateCode": 0,
"StateDescription": "",
"Vesion": "1.0",
"Handler": "Login",
"Data":
{
"Token": "3074e807e73c4a899facb455aab1725e",
"UserID": 1395265
}
}
注册成功可直接获得授权成功的凭证,提供快速注册的方式。
应用程序处理名称:Regist
-
请求参数
- MobileType:【必传】Int整型,手机类型
- Pid:【必传】String类型,获取账号接口下发的账号
- Pwd:【必传】String类型,获取账号接口下发的密码
- IMEI:String类型,手机设备识别码,可以为空
- ScreenX:Int整型,手机屏幕宽度
- ScreenY:Int整型,手机屏幕高度
- RetailID:String类型,客户打包的渠道编号
-
响应参数
- Token:String类型,登录授权成功获得的凭证,有效期(24H)
- UserID:Int整型,用户的唯一编号
-
示例
请求:
http://pass.scutgame.com/?Handler=Regist&MobileType=0&Pid=Z17465&Pwd=564613&IMEI=&ScreenX=&ScreenY&RetailID=&sign=7ca97cdfa7460da2ff164c0cc8883768
响应:
{
"StateCode": 0,
"StateDescription": "",
"Vesion": "1.0",
"Handler": "Regist",
"Data":
{
"Token": "3074e807e73c4a899facb455aab1725e",
"UserID": 1395265
}
}
应用程序处理名称:Password
-
请求参数
- PassportId:【必传】String类型,账号
- Password:【必传】String类型,密码
-
响应参数
- 空
-
示例
请求:
http://pass.scutgame.com/?Handler=Password&PassportId=Z17465&Password=123456&sign=547bc476c3ab068203b76f9362eebd27
响应:
{
"StateCode": 0,
"StateDescription": "",
"Vesion": "1.0",
"Handler": "Password",
"Data":
{
}
}
应用程序处理名称:Validate
-
请求参数
- Token:【必传】String类型,登录凭证
-
响应参数
- Token:登录凭证
- UserId:Int整型,用户的唯一编号
- PassportId:String类型,账号
-
示例
请求:
http://pass.scutgame.com/?Handler=Validate&Token=3074e807e73c4a899facb455aab1725e&sign=370114a38837acd248a3c3eb79d8b4a6
响应:
{
"StateCode": 0,
"StateDescription": "",
"Vesion": "1.0",
"Handler": "Validate",
"Data":
{
"Token": "3074e807e73c4a899facb455aab1725e",
"UserId": 1395265,
"PassportId": "Z17465"
}
}
流程步骤如下:
-
在IIS中新建网站名称(如:pass.scutgame.com);
-
设置应用程序池为 .NET Framework4.0版本;
-
修改Web.config配置文件,设置Token缓存到Redis位置及账号数据库的地址,如下配置:
<appSettings> <add key="Product.SignKey" value=""/> <add key="Product.ClientDesDeKey" value="j6=9=1ac"/> <add key="Redis.Host" value="127.0.0.1:6379" /> <add key="Redis.Db" value="0" /> </appSettings> <connectionStrings> <add name="SnsCenter" providerName="SqlDataProvider" connectionString="Data Source=localhost;Database=SnsCenter;Uid=sa;Pwd=123" /> </connectionStrings> <system.webServer> <defaultDocument> <files> <add value="Default.ashx"/> </files> </defaultDocument> </system.webServer>
配置提示:
- defaultDocument结点是配置网站的默认方法地址,
- 客户访问时只需要(如:http://pass.scutgame.com/?Handler=Login)这样访问,
- 否则需要写完整直址,(如:http://pass.scutgame.com/Default.ashx?Handler=Login)
-
打开IE输入http://pass.scutgame.com/?Handler=Login测试,有显示Json格式数据表示成功,(可能会有弹出下载提示,下载后打开也是Json数据)
客户端的连接方式:先登录 -- 选区(或服) -- 登录游戏服
流程步骤如下:
- 客户端输入账号密码后,将数据提交到账号登录服务器(pass.scutgame.com),请求参数同上说明的格式接入
- 拿到登录服务器提供的授权凭证(Token)后,再请求分服中心服务器(dir.scutgame.com)获得所有的服务器列表信息;
- 选择其中一个服务器,接着需要将token通过请求参数提交给游戏服,较验通过进入游戏。
签名
Key = "任意字符串"
Sign = MD5(Handler=Validate&Token=3074e807e73c4a899facb455aab1725e + `Key`)
Url = ?Handler=Validate&Token=3074e807e73c4a899facb455aab1725e&Sign={Sign}
客户端在账号登录服务器拿到的Token连接到游戏服务器,游戏服务器需要连接到登录服务器较验Token是否有效。
流程步骤如下:
-
修改在游戏服务器LoginAction的子类接口(Action1004)的较验方法,如下:
public class Action1004 : LoginAction { public override bool GetUrlElement() { if (httpGet.GetString("Token", ref _token) && httpGet.GetEnum("MobileType", ref MobileType) && httpGet.GetString("IMEI", ref _imei) && httpGet.GetString("RetailID", ref RetailID)) { httpGet.GetWord("ScreenX", ref ScreenX); httpGet.GetWord("ScreenY", ref ScreenY); httpGet.GetString("ClientAppVersion", ref _clientAppVersion); return true; } return false; } protected override ILogin CreateLogin() { return new AccountServerLogin(GameEnvironment.Setting.AccountServerUrl, _token, _imei); } protected override void DoLoginFail(ILogin login) { ErrorCode = Language.Instance.ErrorCode; ErrorInfo = Language.Instance.ServerBusy; } }
-
修改GameServer.exe.config配置,增加登录服务器的地址,如下:
<appSettings> <add key="AccountServerUrl" value="http://pass.scutgame.com"/> </appSettings>