Получение авторизации из Игрового центра

Для того, чтобы начать играть в клиентскую игру, пользователь должен создать аккаунт Mail.ru (используя существующий аккаунт Почты Mail.ru или зарегистрировавшись на сайте игры), авторизоваться этим аккаунтом в Игровом центре Mail.ru, скачать игру и нажать кнопку "Играть".

Игровой центр (на схеме ниже "@Mail.Ru Launcher") запустит клиент игры и передаст в параметрах командной строки следующие параметры:

game_client.exe --sz_pers_id=[uid] --sz_token=[OTP hash]

Названия параметров --sz_pers_id= и --sz_token= могут быть изменены на другие по желанию разработчиков игры.

Клиент игры должен через свои механизмы передать полученные от Игрового центра параметры на сервер игры. Сервер игры должен выполнить проверку параметров через сервер-сервер протокол, описанный ниже.

Описание протокола игрового сервера

Для общения межды сервером игры и GAS используется протокол HTTP. Вызов метода для проверки авторизации должен проводиться сервером игры только один раз. Второй и последующие вызовы с тем же самым параметром hash будут вызывать ошибку.

GET, https://games.mail.ru/app/[GMRID]/gas?uid=[int uid]&hash=[string hash]&ip=[string ip]&sign=[md5 sign]

Основные параметры:

https://games.mail.ru/app/[GMRID] - URL, на который следует отправлять запросы

  • [GMRID] - идентификатор игры (можно посмотреть в кабинете разработчика на вкладке "Системные свойства");
  • <uid> - ID пользователя, полученный от "@Mail.Ru Launcher";
  • <hash> - OTP hash, полученный от "@Mail.Ru Launcher";
  • <ip> - IPv4 пользователя в формате 'xxx.xxx.xxx.xxx';
  • sign - уникальная цифровая подпись. При подсчете необходмо учитывать все POST параметры переданые в запросе, плюс добавлять параметр appid=[GMRID]. Подробнее о подсчете подписи. Помочь в вычисление подписи может калькулятор подписи.

Сервер отправляет ответ на запрос в формате JSON. Кодировка - utf-8.

Если запрос был обработан успешно, то сервер вернет ответ:

{
    "status": "ok"
}

Возможные ошибки:

// Неправильная подпись
{"status": "error", "errcode": 0, "errmsg": "gas_invalid_sign"}

// Юзер не найден
{"status": "error", "errcode": 0, "errmsg": "gas_invalid_user"}

// Параметр hash невалидный
{"status": "error", "errcode": 10, "errmsg": "gas_otp_error"}

// Доступ ограничен по whitelist
{"status": "error", "errcode": 20, "errmsg": "gas_whitelist_error"}

// Доступ ограничен по whitelist
{"status": "error", "errcode": 30, "errmsg": "gas_whitelist_uid_error"}

// Юзер забанен
{"status": "error", "errcode": 40, "errmsg": "Время бана с '' до ''"}

// Юзер не оплатил игру (для P2P игр)
{"status": "error", "errcode": 50, "errmsg": "gas_no_payment"}

Схема Взаимодействия

Объекты:

  • @Mail.Ru Launcher - клиент Игрового центра, который пользователь использует для скачивания игры;
  • GAS - Game Authorization Service - cистема авторизации Платформы.

1. Пользователь вводит email/пароль в "@Mail.Ru Launcher" (Игровой центр).

2. "@Mail.Ru Launcher" через свои механизмы получает от Mail.ru связку id/одноразовый тикет (OTP hash).

3. "@Mail.Ru Launcher" передает ID/OTP hash в клиент игры.

4. "Game Client" передает ID/OTP hash серверу игры.

5. "Game Server" передает ID/OTP hash в систему (GAS).

6. "GAS" проверяет подлинность OTP Hash, проверяет статус пользователя (забанен или нет), регистрирует вход пользователя и возвращает ответ, содержащий ID пользователя и статус операции.

В зависимости от полученного кода, сервер игры дает команду клиенту игры либо пустить пользователя в игру, либо сообщить ему о возникшей ошибке.

Пример реализации клиента и сервера игры, которые поддерживают получение авторицации через ИЦ можно найти в архиве.