Skip to content
ScutGame edited this page Jul 1, 2015 · 26 revisions

此章节介绍如何使用账号登陆服务器

账号登陆服务器

目前只提供IIS站点方式部署,去掉d=xxx格式的参数(与游戏参数不同之处)。

通讯流程

  1. 客户端发送Passport命令,获取账号,如果IMEI为空则获取新的账号和随机密码,不为空获取上次已注册的账号;

  2. 如果是游客登录,客户端需要保存账号和随机密码,并发送Login命令获取Token登录凭证;

  3. 如果是正常用户,客户端需要提示用户输入密码,并发送Regist命令完成注册并获取Token登录凭证;

  4. 接着使用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
    }
}

接口参数说明

使用的手机类型(MobileType)

  • 0:电脑PC
  • 1:iPod
  • 2:iPad
  • 3:iPhone(越狱)
  • 4:Phone
  • 5:Android
  • 6:Mac
  • 7:WindowsPhone7
  • 8:Unknow未知

响应错误码(StateCode)

  • 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": 
    {
    }
}    

游戏服务器较验Token接口

应用程序处理名称: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"
    }
}    

登陆服务器部署

流程步骤如下

  1. 在IIS中新建网站名称(如:pass.scutgame.com);

  2. 设置应用程序池为 .NET Framework4.0版本;

  3. 修改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>

    配置提示

  4. 打开IE输入http://pass.scutgame.com/?Handler=Login测试,有显示Json格式数据表示成功,(可能会有弹出下载提示,下载后打开也是Json数据)

客户端接入

客户端的连接方式:先登录 -- 选区(或服) -- 登录游戏服

流程步骤如下

  1. 客户端输入账号密码后,将数据提交到账号登录服务器(pass.scutgame.com),请求参数同上说明的格式接入
  2. 拿到登录服务器提供的授权凭证(Token)后,再请求分服中心服务器(dir.scutgame.com)获得所有的服务器列表信息;
  3. 选择其中一个服务器,接着需要将token通过请求参数提交给游戏服,较验通过进入游戏。

签名

Key = "任意字符串"
Sign = MD5(Handler=Validate&Token=3074e807e73c4a899facb455aab1725e + `Key`)
Url = ?Handler=Validate&Token=3074e807e73c4a899facb455aab1725e&Sign={Sign}

游戏服务器接入

客户端在账号登录服务器拿到的Token连接到游戏服务器,游戏服务器需要连接到登录服务器较验Token是否有效。

流程步骤如下

  1. 修改在游戏服务器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;
        }
    }
  2. 修改GameServer.exe.config配置,增加登录服务器的地址,如下:

    <appSettings>
      <add key="AccountServerUrl" value="http://pass.scutgame.com"/>
    </appSettings>
Clone this wiki locally