SlideShare a Scribd company logo
1 of 31
Download to read offline
Описание запросов к веб­сервису 
Оглавление 
Общая информация 
Адреса сервисов 
Запросы от клиента 
Определение авторизованного пользователя 
Авторизация игрока 
Информация о столах 
Информация о столе 
Создание стола 
Удаление стола 
Сесть за стол 
Информация о пользователе 
Создание пользователя 
Запросы от модуля игровой логики 
Очистка информации о столе 
Запрос информации о столе/столах 
Подключение игрока 
Отключение игрока 
Обновление статуса 
Запуск игры за столом 
Состояние игры за столом 
Интеграция с соц.сетями. 
Facebook 
Запрос ключей 
Login 
ВКонтакте 
Запрос ключей 
Login 
Одноклассники 
Запрос ключей 
Login 
Google+ 
Запрос ключей 
Login 
Логика турниров 
Сервис подарков - gifts.php 
Сервис сообщений - messenger.php 
Сервис друзей - friends.php 
Сервис информации о пользователях 
userinfo.php
Общая информация 
Запросы к веб-сервису могут идти с клиентского приложения (клиента) и с модуля 
игровой логики (логики). 
Запросы от логики производятся из локальной зоны и со строго определенных 
ip-адресов. Логика запрашивает у веб-сервиса информацию об игроках и столах, 
уведомляет о событиях в игре и о изменениях в составе игровых столов. 
От клиента приходят запросы авторизации и отключения пользователя, управление 
игровыми столами (информация о столе, создание, удаление, усадка за стол). Никакие 
запросы от клиентов не должны непосредственно менять количество фишек и бонусов 
пользователя. 
Адреса сервисов 
Для запросов от клиента: 
http://pokerapi.3d-game.com:6680/service/ 
Для запросов от логики: 
http://pokerapi.3d-game.com:6680/logic/
Запросы от клиента 
Определение авторизованного 
пользователя 
Пользователь должен быть авторизован, чтобы получить результат при запросе 
сервисов (кроме сервиса авторизации). Логика определения пользователя такова: 
- если в запросе передается параметр token, тогда сервис находит пользователя с 
актуальным токеном и выполняет запрос от имени этого пользователя. 
- если токен не задан, тогда выполняется попытка определения пользователя, 
сохраненного в сессии. 
Авторизация игрока 
Запрос отправляется при входе в программу. Проверяются данные клиента, 
правильность ввода логина и пароля, формируется новый токен. Старый токен этого 
пользователя (если существует) помечается неактивным, игрок отключается от стола, за 
которым он сидит. Логика, управляющая столом, получает запрос о неактивном токене. 
Адрес запроса:/service/login 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
login строка Логин пользователя 
password строка Кеш пароля, который хранится в базе 
lang [ru,en,kz,ua] Язык клиента 
client_name строка Название клиента из таблицы user_interface, поле name 
client_version число Версия клиента из таблицы user_interface, поле version 
Возвращает в случае успеха: JSON 
{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число), 
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя, 
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение, 
"PROGRESS": прогресс
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Информация о столах 
Запрашивается при входе в лобби. Игрок должен видеть активные столы и сколько 
игроков за ним сидит. Возможна фильтрация списка столов по передаваемым параметрам. 
Адрес запроса: /service/rooms/show 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
rule CLASSIC, 
CLASSIC_TRN 
Тип игры 
pace NORMAL, FAST, 
SLOW 
Темп игры 
ante число из 
списка: 
1, 
2, 
3, 
4, 
5, 
6, 
7, 
8, 
9, 
10, 
20, 
30, 
40, 
50, 
60, 
70, 
80, 
90, 
Стоимость стола
100 
max_players 2,6 Число игроков 
max_currency число из 
списка: 
100, 
200, 
300, 
400, 
500, 
600, 
700, 
800, 
900, 
1000 
Максимальная сумма вхождения за стол 
Возвращает в случае успеха: JSON 
{ 
"items" : [ 
{ 
"code": код стола, 
"type_code":тип (POKER), 
"rule_code": правило (CLASSIC, CLASSIC_TRN), 
"ante": антэ (число), 
"max_currency": максимум стола (число), 
"max_players": максимальное количество игроков (число), 
"pace": темп игры (NORMAL), 
"style": стиль стола (NORMAL), 
"server_code": путь до логики, управляющей данным столом, 
"players_amount": количество игроков (число) 
}, 
... 
] 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Информация о столе 
Возвращается информация по определенному столу. Включается информация об 
игроках и зрителях за столом
Адрес запроса: /service/rooms/show/<code> 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code число код стола (передается в строке запроса) 
Возвращает в случае успеха: JSON 
{ 
"items" : [ 
{ 
"code": код стола, 
"type_code":тип (POKER), 
"rule_code": правило (CLASSIC, CLASSIC_TRN), 
"ante": антэ (число), 
"max_currency": максимум стола (число), 
"max_players": максимальное количество игроков (число), 
"pace": темп игры (NORMAL), 
"style": стиль стола (NORMAL), 
"server_code": путь до логики, управляющей данным столом, 
"players_amount": количество игроков (число), 
"players": [ 
{ 
"token": токен пользователя, 
"chips": количество фишек пользователя 
"user_name":имя пользователя, 
"seat_number": номер места за столом (число), 
"USERPIC": картинка пользователя, 
"chips_in_room": количество фишек пользователя за столом 
}, 
... 
], 
"viewers": [ 
{ 
"token": токен пользователя, 
"user_name":имя пользователя, 
"seat_number": номер места за столом (число), 
"USERPIC": картинка пользователя, 
}, 
... 
] 
} 
] 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Создание стола 
Адрес запроса: /service/rooms/create 
Метод запроса: POST 
Ключи: 
Ключ Тип Значение 
ante строка Стоимость стола 
max_currency строка Максимальная сумма вхождения 
max_players строка Максимальное количество игроков 
rule_code CLASSIC, 
CLASSIC_TRN 
Правила игры 
Возвращает в случае успеха: JSON 
{ 
"items" : [ 
{ 
"code": код стола, 
"type_code":тип (POKER), 
"rule_code": правило (CLASSIC, CLASSIC_TRN), 
"ante": антэ (число), 
"max_currency": максимум стола (число), 
"max_players": максимальное количество игроков (число), 
"pace": темп игры (NORMAL), 
"style": стиль стола (NORMAL), 
"server_code": путь до логики, управляющей данным столом, 
"players_amount": количество игроков (число) 
} 
] 
} 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Удаление стола 
Адрес запроса: /service/rooms/delete
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code число Уникальный идентификатор стола 
type NORMAL / FORCE Тип удаления 
Возвращает в случае успеха: JSON 
{ 
"success" : 0 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Сесть за стол 
Данный запрос подготавливает место за столом. Веб-сервис должен проверить что 
этот стол существует (определен в базе) и работает (доступен через веб-сокет). В случае 
ошибки доступа к столу, веб-сервис, исходя из загруженности и доступности серверов, 
должен определить наилучшее размещение и послать соответствующий путь 
пользователю. 
Запрос не влияет на состояние игрока за столом, так как фактического подключения 
игрока еще нет. Но веб-сервису необходимо запомнить адрес стола, чтобы другие игроки 
подключились по тому же адресу. 
В процессе запроса проверяется сумма, с которой игрок желает сесть за стол, и 
корректируется, если это необходимо. Выполняется проверка желаемого места. Если игрок 
уже за столом, тогда возвращается то место, которое он занимает. 
Адрес запроса: /service/rooms/connect 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code число Уникальный идентификатор стола 
role PLAYER, VIEWER с какой ролью сесть за стол 
chips число количество фишек, с которым игрок хочет сесть за 
стол 
seat число на какое место игрок желает попасть
Возвращает в случае успеха: JSON 
{ 
"success" : 
{ 
"chips": откорректированная сумма, с которой можно сесть за стол, 
"seat": место, где сидит или может сесть пользователь, 
"server_code": адрес стола, например 
"ws://pokerweb.dyndns.tv:8887/server1/456" 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса, 
"extra": { 
"server_code": адрес стола, например 
"ws://pokerweb.dyndns.tv:8887/server1/456" 
} 
} 
} 
Информация о пользователе 
Возвращает данные об авторизованном пользователе, либо пользователе с 
указанным токеном 
Адрес запроса: /service/users/info 
Метод запроса: GET 
Ключи: нет 
Возвращает в случае успеха: JSON 
{ 
"success" : 
{ 
"users": [{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число), 
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя, 
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение,
"PROGRESS": прогресс 
}] 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Создание пользователя 
Проверяет возможность создания пользователя для заданных параметров, создает 
в случае успеха, выполняет авторизацию, возвращает данные о пользователя, включая 
token. 
Параметр email необязательный. В случае, если он не задан, либо задана пустая 
строка, емейл генерируется в коде и пользователю присвается статус гостя. 
Адрес запроса: /service/users/create 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
username строка Логин пользователя 
password строка Кеш пароля, который хранится в базе 
name строка Имя пользователя 
email строка Email пользователя (необязательный) 
lang [ru,en,kz,ua] Язык клиента 
client_name строка Название клиента из таблицы user_interface, поле name 
client_version число Версия клиента из таблицы user_interface, поле version 
Возвращает в случае успеха: JSON 
{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число), 
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя,
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение, 
"PROGRESS": прогресс 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Запросы от модуля игровой логики 
Очистка информации о столе 
Запрашивается один раз после запуска модуля логики. Получив запрос, веб-сервис 
должен очистить информацию об игроках за этим столом, так как за этим столом реально 
никаких игроков пока нет. 
Адрес запроса: /logic/rooms/clear/{код стола} 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"items": [{ 
"code": числовой код стола, 
"type_code":тип (POKER), 
"rule_code": правило (CLASSIC), 
"ante": антэ (число), 
"max_currency": максимум стола (число), 
"max_players": максимальное количество игроков (число), 
"pace": темп игры (NORMAL), 
"pace_in_secs": время на ход в секундах 
"style": стиль стола (NORMAL), 
"server_code": путь до стола, 
"players_amount": количество игроков,
"round": номер последнего раунда 
"players": [], 
"viewers": [] 
}] 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Запрос информации о столе/столах 
Сервис может использоваться как для получения списка столов, удовлетворяющих 
условиям, так и для получение данных по одному столу (если задан code). При этом, если 
code задан ключи фильтрации не учитываются. 
Адрес запроса:/logic/rooms/show/{код стола} 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
rule CLASSIC, 
CLASSIC_TRN 
Тип игры 
pace NORMAL, FAST, 
SLOW 
Темп игры 
ante число из 
списка: 
1, 
2, 
3, 
4, 
5, 
6, 
7, 
8, 
9, 
10, 
20, 
30, 
40, 
50, 
60, 
70, 
Стоимость стола
80, 
90, 
100 
max_players 2,6 Число игроков 
max_currency число из 
списка: 
100, 
200, 
300, 
400, 
500, 
600, 
700, 
800, 
900, 
1000 
Максимальная сумма вхождения за стол 
Возвращает в случае успеха: JSON 
{ 
"items": [{ 
"code": числовой код стола, 
"type_code":тип (POKER), 
"rule_code": правило (CLASSIC), 
"ante": антэ (число), 
"max_currency": максимум стола (число), 
"max_players": максимальное количество игроков (число), 
"pace": темп игры (NORMAL), 
"pace_in_secs": время на ход в секундах 
"style": стиль стола (NORMAL), 
"server_code": путь до стола, 
"players_amount": количество игроков, 
"round": номер последнего раунда 
"players": [{ 
"token": токен пользователя, 
"user_name": имя пользователя, 
"seat_number": номер места 
}, 
... 
], 
"viewers": [{ 
"token": токен пользователя, 
"user_name": имя пользователя, 
"seat_number": номер места 
}, 
... 
] 
}, 
...
] 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Подключение игрока 
Запрос отправляется при подключении игрока к игровому столу. Веб-сервис 
проверит, не играет ли пользователь за этим столом. Если играет, в результате сервис 
вернет номер места, где сидит пользователь.. Запрос меняет состояние игрока и стола в 
базе, связывая их между собой. Со счета пользователя снимается сумма, необходимая 
для игры за столом. 
Подключение игрока может быть выполнено в любой момент, вне зависимости от 
хода игры за столом. 
Адрес запроса:/logic/rooms/connect 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code число Уникальный идентификатор стола 
token строка Токен пользователя 
role PLAYER / VIEWER Тип игрока 
chips число Фишки игрока за столом 
seat число 1-6 Номер места за столом 
Возвращает в случае успеха: JSON 
{ 
"success" : 
{ 
"chips": 100, 
"user_id": идентификатор игрока, 
"lang": язык интерфейса, 
"name": видимое имя игрока, 
"seat": место игрока за столом, 
"USERPIC": картинка игрока 
} 
} 
Возвращает в случае ошибки: JSON
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса, 
"extra": { 
"user_id": id пользователя, если пользователь все еще за столом, 
"token": токен пользователя, если пользователь все еще за столом 
} 
} 
} 
Отключение игрока 
Отключение игрока может быть выполнено в любой момент, вне зависимости от 
хода игры за столом. Если игрок отключился во время игры, считается что он бросил карты. 
Количество фишек при выходе должно быть меньше или равно количеству фишек с 
предыдущего запроса (обновление статуса или подключение). 
Адрес запроса:/logic/rooms/disconnect 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code число Уникальный идентификатор стола 
players json-строка список пользователей, которых необходимо 
отключить 
Формат players: 
[{ 
"token" : токен пользователя, 
"chips" : текущее количество фишек у пользователя за столом, 
"status" : статус пользователя (active/vabank/fold/disconnected), 
"cards" : карты пользователя, 
"combination" : какая комбинация карт у пользователя, 
"open" : открыл пользователь карты или нет (булево), 
"won" : сколько пользователь выиграл за текущий раунд, 
"act" : действие с пользователем (continue, disconnect) 
}, 
... 
] 
Возвращает в случае успеха: JSON 
{
"success" : 
{ 
"players": [{ 
"token" : токен пользователя, 
"chips" : фишки пользователя, которые были добавлены пользователю 
в результате октлючения, 
"status" : статус пользователя 
}, 
... 
] 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Обновление статуса 
Запрос отправляется по окончанию раздачи. Содержит информацию об игроках и 
движении фишек внутри стола. 
Списание 
Адрес запроса: /logic/rooms/status_update 
Метод запроса: POST 
Ключи: 
Ключ Тип Значение 
code число Уникальный идентификатор стола 
players JSON Информация об игроках 
logs строка Логи игры в формате PokerStars 
Формат информации об игроках: JSON 
[ 
{ 
"token": токен игрока за столом, 
"cards": строка со значениями карт в понятном формате, 
"combination": название комбинации 
"status": статус игрока может быть active/vabank/fold/disconnected, 
"won": сумма выигрыша или проигрыша (отрицательное значение), 
"chips": новое количество фишек, 
"open" : открыл пользователь карты или нет (булево), 
"act" : действие с пользователем (continue, disconnect) 
}, 
... 
]
Возвращает в случае успеха: JSON 
{ 
"success" : 
{ 
"players": [{ 
"token" : токен пользователя, 
"chips" : фишки пользователя, которые были добавлены пользователю 
в результате октлючения, 
"status" : статус пользователя 
}, 
... 
] 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Запуск игры за столом 
Выполняем, чтобы дать знать серверу о начале новой игры за столом. Сервер 
фиксирует начальное количество игроков. Для турнирных столов происходит заполнение 
предварительной информации о выигранных местах 
Списание 
Адрес запроса: /logic/rooms/start/<code> 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"items": [{ 
"code": числовой код стола, 
"type_code":тип (POKER), 
"rule_code": правило (CLASSIC), 
"ante": антэ (число), 
"max_currency": максимум стола (число), 
"max_players": максимальное количество игроков (число), 
"pace": темп игры (NORMAL), 
"pace_in_secs": время на ход в секундах 
"style": стиль стола (NORMAL),
"server_code": путь до стола, 
"players_amount": количество игроков, 
"round": номер последнего раунда 
"players": [{ 
"token": токен пользователя, 
"user_name": имя пользователя, 
"seat_number": номер места 
}, 
... 
], 
"viewers": [{ 
"token": токен пользователя, 
"user_name": имя пользователя, 
"seat_number": номер места 
}, 
... 
] 
}, 
... 
] 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Состояние игры за столом 
Возвращает возможные для выигрыша места за столом и какие места уже занимают 
пользователи. Сколько фишек было получено пользователем. 
Списание 
Адрес запроса: /logic/rooms/ranks/<code> 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"success": [{ 
"rank": место для выигрыша за столом, 
"part":какая часть призового фонда полагается за занятое место (в 
процентах), 
"user_id": id пользователя, занявнешего указанное место,
"user_rank": реально занаятое место (пример: 2 пользователя 
одновременно закончивают играть на местах (rank) 3 и 4. В этом случае 
один из них займет rank = 4, второй rank = 3, но реальные места у обоих 
будут 4), 
"user_won": сколько пользователь выиграл 
}, 
... 
] 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Интеграция с соц.сетями. 
Принцип работы заключается в генерации пути к соц.сети, переход по которому приводит 
к авторизации в соц.сети. После этого перехватывается code, который возвращается 
соц.сетью. Указанный выше код используется для подключения сервера к соц.сети и 
получения информации о пользователе. Полученные данные используются для 
определения пользователя в системе или его создания (в случае отсутствия). 
Facebook 
Запрос ключей 
Адрес запроса: /integration/fb/keys 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"success": { 
"app_id": id приложения, 
"login_url":путь, по которому необходимо направить запрос 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки,
"message": описание ошибки на языке интерфейса 
} 
} 
Login 
Адрес запроса: /integration/fb/login 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code строка Код, который вернула соц.сеть 
lang [ru,en,kz,ua] Язык клиента 
client_name строка Название клиента из таблицы user_interface, поле name 
client_version число Версия клиента из таблицы user_interface, поле version 
Возвращает в случае успеха: JSON 
{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число), 
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя, 
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение, 
"PROGRESS": прогресс 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
}
ВКонтакте 
Запрос ключей 
Адрес запроса: /integration/vk/keys 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"success": { 
"app_id": id приложения, 
"login_url":путь, по которому необходимо направить запрос 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Login 
Адрес запроса: /integration/vk/login 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code строка Код, который вернула соц.сеть 
lang [ru,en,kz,ua] Язык клиента 
client_name строка Название клиента из таблицы user_interface, поле name 
client_version число Версия клиента из таблицы user_interface, поле version 
Возвращает в случае успеха: JSON 
{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число),
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя, 
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение, 
"PROGRESS": прогресс 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Одноклассники 
Запрос ключей 
Адрес запроса: /integration/od/keys 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"success": { 
"app_id": id приложения, 
"login_url":путь, по которому необходимо направить запрос 
} 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Login 
Адрес запроса: /integration/od/login 
Метод запроса: GET 
Ключи:
Ключ Тип Значение 
code строка Код, который вернула соц.сеть 
lang [ru,en,kz,ua] Язык клиента 
client_name строка Название клиента из таблицы user_interface, поле name 
client_version число Версия клиента из таблицы user_interface, поле version 
Возвращает в случае успеха: JSON 
{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число), 
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя, 
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение, 
"PROGRESS": прогресс 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Google+ 
Запрос ключей 
Адрес запроса: /integration/gp/keys 
Метод запроса: GET 
Ключи: отсутствуют 
Возвращает в случае успеха: JSON 
{ 
"success": { 
"app_id": id приложения, 
"login_url":путь, по которому необходимо направить запрос 
} 
}
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
} 
Login 
Адрес запроса: /integration/gp/login 
Метод запроса: GET 
Ключи: 
Ключ Тип Значение 
code строка Код, который вернула соц.сеть 
lang [ru,en,kz,ua] Язык клиента 
client_name строка Название клиента из таблицы user_interface, поле name 
client_version число Версия клиента из таблицы user_interface, поле version 
Возвращает в случае успеха: JSON 
{ 
"id": идентификатор игрока 
"token": токен пользователя 
"name" : имя пользователя, 
"chips": количество фишек, 
"bonus": количество бонусов, 
"level": уровень игрока (число), 
"level_title": название уровня игрока, 
"HANDS_WON": выиграно раздач, 
"HANDS_PLAYED": раздач сыграно, 
"USERPIC": картинка пользователя, 
"LAST_PURCHASE": последняя покупка, 
"LAST_ACHIEVEMENT": последняя достижение, 
"PROGRESS": прогресс 
} 
Возвращает в случае ошибки: JSON 
{ 
"error": 
{ 
"code": код ошибки, 
"message": описание ошибки на языке интерфейса 
} 
}
Логика турниров 
В турнире каждый стол имеет определенную стоимость. До начала турнира со всех 
участников списывается стоимость стола, из этих средств формируется призовой фонд 
турнира. После начала турнира блокируется добавление новых игроков. 
Правило игры (rule_code) для турнирного стола равно «CLASSIC_TRN». 
Специальных запросов для работы турниров не требуется. Запуск и завершение 
выполняется в процессе обычной работы со столами.
Сервис подарков ­gifts. 
php 
Адрес: http://pokerapi.3d-game.com:6680/gifts.php 
Постоянные параметры: 
id ­user_ 
id текущего юзера 
token ­актуальный 
токен текущего юзера 
Функции: 
cmd=shop ­возврат 
ассортимента магазина 
Дополнительные параметры функции ­нет. 
Возврат: 
{“status”: 0, 
“shop”: [{“id”:6, “name”: ”Sombrero”, “dic_description”: “”, “lname”: 
“Сомбреро”, “ldesc”: “Мексиканская шляпа”, 
“image_base_name”: 
“http://pokerapi.3d­game. 
com/images/goods/sombrero.png”}, 
{...}] 
} 
cmd=price ­получение 
строк прайса по заданному товару 
Дополнительные параметры: item ­id 
товара 
Возврат: 
{“status”:0, “price”:[ 
{“id”: 1, “account_type_code”: “bonus”, “amount”: 10, “duration” :0}, 
{“id”:2, “account_type_code”: “chips”, “amount”: 1000, “duration”: 7}, 
{...} 
]} 
cmd=gift ­купить 
подарок с передачей другому пользователю 
Дополнительные параметры: 
qty ­количество, 
по умолчанию =1 
to ­user_ 
id друга, которому надо подарить 
pos ­позиция 
в прайсе, по которой делается покупка (id из возврата функции price) 
Возврат: 
{“status” : 0, “description”: “ok”} 
если status > 0, description содержит описание ошибки.
Сервис сообщений ­messenger. 
php 
Адрес: http://pokerapi.3d­game. 
com:6680/messenger.php (GET / POST) 
Постоянные параметры: 
uid = user_id текущего пользователя 
token = токен текущего пользователя 
Функции: 
● Получение списка сообщений (дефолтная функция) 
Дополнительные параметры функции: 
last_msg ­unix­время, 
будут получены только сообщения новее этого времени, 
если есть. При 0 или отсутствии параметра ­читаем 
все. 
unread=1 ­признак 
запроса только непрочитанных сообщений. Если нужны все 
сообщения ­этого 
параметра быть не должно. 
(примечание: значение параметра игнорируется, нужен только факт его наличия) 
type=1 ­читать 
только сообщения заданного типа. В настоящее время есть 
следующие типы: 0 ­сообщение 
пользователь­пользователь, 
1 ­сообщение 
система­пользователь, 
2 ­запрос 
на добавление в список друзей, 4 ­уведомление 
о начислении бонуса 
page=N ­постраничный 
вывод, сообщения разбиваются на страницы по 20 штук. 
Страница номер 0 содержит самые свежие сообщения. 
Формат сообщения: 
{“status”: 0, “count”: 3, “unread”: 1, “last_msg”:112349844, “messages”: 
[{"id":"349","msg_time":"1406225220","user_id":"109","name":"Gleb 
Daniloff","text":"w.level","is_readed":"f","msg_type":"1"},{...}] 
} 
status ­0 
означает отсутствие ошибок, count ­общее 
количество сообщений, отправленных данному 
юзеру, включая прочитанные, unread ­количество 
непрочитанных сообщений, адресованных юзеру. 
last_msg ­текущее 
время сервера, может быть использовано в следующем запросе. 
id ­идентификатор 
сообщения, msg_time ­время 
сообщения, user_id ­идентификатор 
отправителя 
(для системных равен идентификатору получателя), name ­имя 
отправителя (для системных ­имя 
получателя), text ­текст 
сообщения, is_readed ­логическое, 
флаг прочтения, msg_type ­тип 
сообщения 
● Пометить сообщения прочитанными 
read=101 или read=4;5;7;9;34;65;78 
(примечание: получатель сообщений не проверяется) 
● Отправить сообщение игроку 
Дополнительные параметры функции: 
❖ to=66 ­user_ 
id получателя (обязательный параметр) 
❖ text=ваше сообщение (обязательный параметр) 
Ответ: 
{“satus”:0, ”msg_id”:988} 
где msg_id ­идентификатор 
вновь созданного сообщения 
● Получить информацию об ожидающих сообщениях, не забирая сами сообщения 
Дополнительный параметры функции:
❖ info=1 
Приходит ответ следующего вида: 
[{type:0, id:123, count:2}, {type:1, count:12}, {type:2, count:20}] 
● Получить список пользователей, с которыми был обмен сообщениями 
❖ info=2 
Приходит ответ следующего вида: 
{“status”:0, “users”:[{“id”:NNN,”name”:”user_name”,”state”:”offline”, “userpic”: “http://...”, 
“level”:4},{...},...] }
Сервис друзей ­friends. 
php 
Адрес: http://pokerapi.3d­game. 
com:6680/friends.php (GET / POST) 
Постоянные параметры: 
me = user_id текущего пользователя 
token = токен текущего пользователя 
cmd = код команды 
Функции: 
● Получение диалога [cmd=history] 
Дополнительные параметры 
❖ page=0 ­текущая 
страница (0 ­самые 
новые) 
❖ id = user_id друга 
Получаемый ответ: 
{"status"=>0,"count":25,"pages":3,"messages":[{id, msg_time, u_from, name, text, 
is_readed},{...}]); 
● Запрос списка друзей [cmd=list] 
Дополнительные параметры: нет 
Получаемый ответ: 
{ 
“status”:0 
“friends”: [{“id", "chips", "bonus", "level", "name", "accepted", "userpic", "status"},{...}] 
}
Сервис информации о пользователях 
userinfo.php 
Адрес: http://pokerapi.3d­game. 
com:6680/userinfo.php (GET / POST) 
Постоянные параметры: 
uid = user_id текущего пользователя 
token = токен текущего пользователя 
cmd = код команды 
Функции: 
● Поиск пользователя [cmd=find] 
Дополнительные параметры 
❖ text ­искомый 
текст (логин, e­mail 
или user_id) 
Получаемый ответ: 
{"status":0, “users”: [{"uid":NUM, "name":”user_name”, "level":NUM, "userpic":URL, 
"state":”offline”|”online”|”ingame;TABLE”},{...},...]} 
Примечание: поиск регистронезависимый. Если text содержит цифровое значение, 
осуществляется поиск по точному совпадению по user_id, иначе ­в 
случае соответствия 
текста шаблону адреса ­по 
точному совпадению с e­mail, 
в противном случае ­по 
первым 
буквам логина. 
● Изменение личных данных пользователя [cmd=save] 
Дополнительные параметры 
❖ uname ­новое 
отображаемое имя пользователя; 
❖ upass ­новый 
пароль, нешифрованный; 
❖ oldpass ­текущий 
пароль, нешифрованный (необходим только при наличии 
параметра upass); 
❖ email ­новый 
адрес почтового ящика 
❖ userpic ­картинка 
пользователя (jpg/png/gif) 
Примечание: любой из параметров может отсутствовать. Обязателен хотя бы один 
параметр. При наличии картинки данные должны передаваться по протоколу 
POST:multipart/form­data. 
При отсутствии картинки допустима кодировка 
POST:application/x­www­form­urlencoded.

More Related Content

Viewers also liked

Back to Basics: How to Modernize Reports and Dashboards
Back to Basics: How to Modernize Reports and DashboardsBack to Basics: How to Modernize Reports and Dashboards
Back to Basics: How to Modernize Reports and DashboardsInside Analysis
 
Social Media zur Suche und Bindung von Mitarbeitern in der Logistik
Social Media zur Suche und Bindung von Mitarbeitern in der Logistik Social Media zur Suche und Bindung von Mitarbeitern in der Logistik
Social Media zur Suche und Bindung von Mitarbeitern in der Logistik Heike Simmet
 
Roteiro 2º INFORMÁTICA
Roteiro 2º INFORMÁTICARoteiro 2º INFORMÁTICA
Roteiro 2º INFORMÁTICAeeeppacatuba
 

Viewers also liked (9)

Untitled 1
Untitled 1Untitled 1
Untitled 1
 
Back to Basics: How to Modernize Reports and Dashboards
Back to Basics: How to Modernize Reports and DashboardsBack to Basics: How to Modernize Reports and Dashboards
Back to Basics: How to Modernize Reports and Dashboards
 
Social Media zur Suche und Bindung von Mitarbeitern in der Logistik
Social Media zur Suche und Bindung von Mitarbeitern in der Logistik Social Media zur Suche und Bindung von Mitarbeitern in der Logistik
Social Media zur Suche und Bindung von Mitarbeitern in der Logistik
 
Pp2
Pp2Pp2
Pp2
 
Ley n 18191
Ley n 18191Ley n 18191
Ley n 18191
 
Educación Superior en el siglo 21
Educación Superior en el siglo 21Educación Superior en el siglo 21
Educación Superior en el siglo 21
 
Sorteo horno pan
Sorteo horno panSorteo horno pan
Sorteo horno pan
 
01 sumas hasta 9
01 sumas hasta 901 sumas hasta 9
01 sumas hasta 9
 
Roteiro 2º INFORMÁTICA
Roteiro 2º INFORMÁTICARoteiro 2º INFORMÁTICA
Roteiro 2º INFORMÁTICA
 

Similar to web_serivces

Uniqum. Презентация проекта.
Uniqum. Презентация проекта.Uniqum. Презентация проекта.
Uniqum. Презентация проекта.Валерий Пазюк
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данныхPyNSK
 
Многопользовательские браузерные игры нового типа
Многопользовательские браузерные игры нового типаМногопользовательские браузерные игры нового типа
Многопользовательские браузерные игры нового типаAnton Volkov
 
Разработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан ШиндаулетовРазработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан ШиндаулетовCyber Fund
 
Машинное обучение для ваших игр и бизнеса
Машинное обучение для ваших игр и бизнесаМашинное обучение для ваших игр и бизнеса
Машинное обучение для ваших игр и бизнесаromovpa
 
Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"Olga Kuzhel
 
топ турнир презентация маркетинг
топ турнир презентация маркетингтоп турнир презентация маркетинг
топ турнир презентация маркетингOlga Kuzhel
 
Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"Olga Kuzhel
 
Виктор Грищенко
Виктор ГрищенкоВиктор Грищенко
Виктор ГрищенкоCodeFest
 

Similar to web_serivces (9)

Uniqum. Презентация проекта.
Uniqum. Презентация проекта.Uniqum. Презентация проекта.
Uniqum. Презентация проекта.
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данных
 
Многопользовательские браузерные игры нового типа
Многопользовательские браузерные игры нового типаМногопользовательские браузерные игры нового типа
Многопользовательские браузерные игры нового типа
 
Разработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан ШиндаулетовРазработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан Шиндаулетов
 
Машинное обучение для ваших игр и бизнеса
Машинное обучение для ваших игр и бизнесаМашинное обучение для ваших игр и бизнеса
Машинное обучение для ваших игр и бизнеса
 
Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"
 
топ турнир презентация маркетинг
топ турнир презентация маркетингтоп турнир презентация маркетинг
топ турнир презентация маркетинг
 
Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"Презентация игровых турниров онлайн "TOPTurnir"
Презентация игровых турниров онлайн "TOPTurnir"
 
Виктор Грищенко
Виктор ГрищенкоВиктор Грищенко
Виктор Грищенко
 

web_serivces

  • 1. Описание запросов к веб­сервису Оглавление Общая информация Адреса сервисов Запросы от клиента Определение авторизованного пользователя Авторизация игрока Информация о столах Информация о столе Создание стола Удаление стола Сесть за стол Информация о пользователе Создание пользователя Запросы от модуля игровой логики Очистка информации о столе Запрос информации о столе/столах Подключение игрока Отключение игрока Обновление статуса Запуск игры за столом Состояние игры за столом Интеграция с соц.сетями. Facebook Запрос ключей Login ВКонтакте Запрос ключей Login Одноклассники Запрос ключей Login Google+ Запрос ключей Login Логика турниров Сервис подарков - gifts.php Сервис сообщений - messenger.php Сервис друзей - friends.php Сервис информации о пользователях userinfo.php
  • 2.
  • 3. Общая информация Запросы к веб-сервису могут идти с клиентского приложения (клиента) и с модуля игровой логики (логики). Запросы от логики производятся из локальной зоны и со строго определенных ip-адресов. Логика запрашивает у веб-сервиса информацию об игроках и столах, уведомляет о событиях в игре и о изменениях в составе игровых столов. От клиента приходят запросы авторизации и отключения пользователя, управление игровыми столами (информация о столе, создание, удаление, усадка за стол). Никакие запросы от клиентов не должны непосредственно менять количество фишек и бонусов пользователя. Адреса сервисов Для запросов от клиента: http://pokerapi.3d-game.com:6680/service/ Для запросов от логики: http://pokerapi.3d-game.com:6680/logic/
  • 4. Запросы от клиента Определение авторизованного пользователя Пользователь должен быть авторизован, чтобы получить результат при запросе сервисов (кроме сервиса авторизации). Логика определения пользователя такова: - если в запросе передается параметр token, тогда сервис находит пользователя с актуальным токеном и выполняет запрос от имени этого пользователя. - если токен не задан, тогда выполняется попытка определения пользователя, сохраненного в сессии. Авторизация игрока Запрос отправляется при входе в программу. Проверяются данные клиента, правильность ввода логина и пароля, формируется новый токен. Старый токен этого пользователя (если существует) помечается неактивным, игрок отключается от стола, за которым он сидит. Логика, управляющая столом, получает запрос о неактивном токене. Адрес запроса:/service/login Метод запроса: GET Ключи: Ключ Тип Значение login строка Логин пользователя password строка Кеш пароля, который хранится в базе lang [ru,en,kz,ua] Язык клиента client_name строка Название клиента из таблицы user_interface, поле name client_version число Версия клиента из таблицы user_interface, поле version Возвращает в случае успеха: JSON { "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число), "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя, "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение, "PROGRESS": прогресс
  • 5. } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Информация о столах Запрашивается при входе в лобби. Игрок должен видеть активные столы и сколько игроков за ним сидит. Возможна фильтрация списка столов по передаваемым параметрам. Адрес запроса: /service/rooms/show Метод запроса: GET Ключи: Ключ Тип Значение rule CLASSIC, CLASSIC_TRN Тип игры pace NORMAL, FAST, SLOW Темп игры ante число из списка: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, Стоимость стола
  • 6. 100 max_players 2,6 Число игроков max_currency число из списка: 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 Максимальная сумма вхождения за стол Возвращает в случае успеха: JSON { "items" : [ { "code": код стола, "type_code":тип (POKER), "rule_code": правило (CLASSIC, CLASSIC_TRN), "ante": антэ (число), "max_currency": максимум стола (число), "max_players": максимальное количество игроков (число), "pace": темп игры (NORMAL), "style": стиль стола (NORMAL), "server_code": путь до логики, управляющей данным столом, "players_amount": количество игроков (число) }, ... ] } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Информация о столе Возвращается информация по определенному столу. Включается информация об игроках и зрителях за столом
  • 7. Адрес запроса: /service/rooms/show/<code> Метод запроса: GET Ключи: Ключ Тип Значение code число код стола (передается в строке запроса) Возвращает в случае успеха: JSON { "items" : [ { "code": код стола, "type_code":тип (POKER), "rule_code": правило (CLASSIC, CLASSIC_TRN), "ante": антэ (число), "max_currency": максимум стола (число), "max_players": максимальное количество игроков (число), "pace": темп игры (NORMAL), "style": стиль стола (NORMAL), "server_code": путь до логики, управляющей данным столом, "players_amount": количество игроков (число), "players": [ { "token": токен пользователя, "chips": количество фишек пользователя "user_name":имя пользователя, "seat_number": номер места за столом (число), "USERPIC": картинка пользователя, "chips_in_room": количество фишек пользователя за столом }, ... ], "viewers": [ { "token": токен пользователя, "user_name":имя пользователя, "seat_number": номер места за столом (число), "USERPIC": картинка пользователя, }, ... ] } ] } Возвращает в случае ошибки: JSON { "error": {
  • 8. "code": код ошибки, "message": описание ошибки на языке интерфейса } } Создание стола Адрес запроса: /service/rooms/create Метод запроса: POST Ключи: Ключ Тип Значение ante строка Стоимость стола max_currency строка Максимальная сумма вхождения max_players строка Максимальное количество игроков rule_code CLASSIC, CLASSIC_TRN Правила игры Возвращает в случае успеха: JSON { "items" : [ { "code": код стола, "type_code":тип (POKER), "rule_code": правило (CLASSIC, CLASSIC_TRN), "ante": антэ (число), "max_currency": максимум стола (число), "max_players": максимальное количество игроков (число), "pace": темп игры (NORMAL), "style": стиль стола (NORMAL), "server_code": путь до логики, управляющей данным столом, "players_amount": количество игроков (число) } ] } { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Удаление стола Адрес запроса: /service/rooms/delete
  • 9. Метод запроса: GET Ключи: Ключ Тип Значение code число Уникальный идентификатор стола type NORMAL / FORCE Тип удаления Возвращает в случае успеха: JSON { "success" : 0 } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Сесть за стол Данный запрос подготавливает место за столом. Веб-сервис должен проверить что этот стол существует (определен в базе) и работает (доступен через веб-сокет). В случае ошибки доступа к столу, веб-сервис, исходя из загруженности и доступности серверов, должен определить наилучшее размещение и послать соответствующий путь пользователю. Запрос не влияет на состояние игрока за столом, так как фактического подключения игрока еще нет. Но веб-сервису необходимо запомнить адрес стола, чтобы другие игроки подключились по тому же адресу. В процессе запроса проверяется сумма, с которой игрок желает сесть за стол, и корректируется, если это необходимо. Выполняется проверка желаемого места. Если игрок уже за столом, тогда возвращается то место, которое он занимает. Адрес запроса: /service/rooms/connect Метод запроса: GET Ключи: Ключ Тип Значение code число Уникальный идентификатор стола role PLAYER, VIEWER с какой ролью сесть за стол chips число количество фишек, с которым игрок хочет сесть за стол seat число на какое место игрок желает попасть
  • 10. Возвращает в случае успеха: JSON { "success" : { "chips": откорректированная сумма, с которой можно сесть за стол, "seat": место, где сидит или может сесть пользователь, "server_code": адрес стола, например "ws://pokerweb.dyndns.tv:8887/server1/456" } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса, "extra": { "server_code": адрес стола, например "ws://pokerweb.dyndns.tv:8887/server1/456" } } } Информация о пользователе Возвращает данные об авторизованном пользователе, либо пользователе с указанным токеном Адрес запроса: /service/users/info Метод запроса: GET Ключи: нет Возвращает в случае успеха: JSON { "success" : { "users": [{ "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число), "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя, "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение,
  • 11. "PROGRESS": прогресс }] } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Создание пользователя Проверяет возможность создания пользователя для заданных параметров, создает в случае успеха, выполняет авторизацию, возвращает данные о пользователя, включая token. Параметр email необязательный. В случае, если он не задан, либо задана пустая строка, емейл генерируется в коде и пользователю присвается статус гостя. Адрес запроса: /service/users/create Метод запроса: GET Ключи: Ключ Тип Значение username строка Логин пользователя password строка Кеш пароля, который хранится в базе name строка Имя пользователя email строка Email пользователя (необязательный) lang [ru,en,kz,ua] Язык клиента client_name строка Название клиента из таблицы user_interface, поле name client_version число Версия клиента из таблицы user_interface, поле version Возвращает в случае успеха: JSON { "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число), "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя,
  • 12. "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение, "PROGRESS": прогресс } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Запросы от модуля игровой логики Очистка информации о столе Запрашивается один раз после запуска модуля логики. Получив запрос, веб-сервис должен очистить информацию об игроках за этим столом, так как за этим столом реально никаких игроков пока нет. Адрес запроса: /logic/rooms/clear/{код стола} Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "items": [{ "code": числовой код стола, "type_code":тип (POKER), "rule_code": правило (CLASSIC), "ante": антэ (число), "max_currency": максимум стола (число), "max_players": максимальное количество игроков (число), "pace": темп игры (NORMAL), "pace_in_secs": время на ход в секундах "style": стиль стола (NORMAL), "server_code": путь до стола, "players_amount": количество игроков,
  • 13. "round": номер последнего раунда "players": [], "viewers": [] }] } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Запрос информации о столе/столах Сервис может использоваться как для получения списка столов, удовлетворяющих условиям, так и для получение данных по одному столу (если задан code). При этом, если code задан ключи фильтрации не учитываются. Адрес запроса:/logic/rooms/show/{код стола} Метод запроса: GET Ключи: Ключ Тип Значение rule CLASSIC, CLASSIC_TRN Тип игры pace NORMAL, FAST, SLOW Темп игры ante число из списка: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, Стоимость стола
  • 14. 80, 90, 100 max_players 2,6 Число игроков max_currency число из списка: 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 Максимальная сумма вхождения за стол Возвращает в случае успеха: JSON { "items": [{ "code": числовой код стола, "type_code":тип (POKER), "rule_code": правило (CLASSIC), "ante": антэ (число), "max_currency": максимум стола (число), "max_players": максимальное количество игроков (число), "pace": темп игры (NORMAL), "pace_in_secs": время на ход в секундах "style": стиль стола (NORMAL), "server_code": путь до стола, "players_amount": количество игроков, "round": номер последнего раунда "players": [{ "token": токен пользователя, "user_name": имя пользователя, "seat_number": номер места }, ... ], "viewers": [{ "token": токен пользователя, "user_name": имя пользователя, "seat_number": номер места }, ... ] }, ...
  • 15. ] } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Подключение игрока Запрос отправляется при подключении игрока к игровому столу. Веб-сервис проверит, не играет ли пользователь за этим столом. Если играет, в результате сервис вернет номер места, где сидит пользователь.. Запрос меняет состояние игрока и стола в базе, связывая их между собой. Со счета пользователя снимается сумма, необходимая для игры за столом. Подключение игрока может быть выполнено в любой момент, вне зависимости от хода игры за столом. Адрес запроса:/logic/rooms/connect Метод запроса: GET Ключи: Ключ Тип Значение code число Уникальный идентификатор стола token строка Токен пользователя role PLAYER / VIEWER Тип игрока chips число Фишки игрока за столом seat число 1-6 Номер места за столом Возвращает в случае успеха: JSON { "success" : { "chips": 100, "user_id": идентификатор игрока, "lang": язык интерфейса, "name": видимое имя игрока, "seat": место игрока за столом, "USERPIC": картинка игрока } } Возвращает в случае ошибки: JSON
  • 16. { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса, "extra": { "user_id": id пользователя, если пользователь все еще за столом, "token": токен пользователя, если пользователь все еще за столом } } } Отключение игрока Отключение игрока может быть выполнено в любой момент, вне зависимости от хода игры за столом. Если игрок отключился во время игры, считается что он бросил карты. Количество фишек при выходе должно быть меньше или равно количеству фишек с предыдущего запроса (обновление статуса или подключение). Адрес запроса:/logic/rooms/disconnect Метод запроса: GET Ключи: Ключ Тип Значение code число Уникальный идентификатор стола players json-строка список пользователей, которых необходимо отключить Формат players: [{ "token" : токен пользователя, "chips" : текущее количество фишек у пользователя за столом, "status" : статус пользователя (active/vabank/fold/disconnected), "cards" : карты пользователя, "combination" : какая комбинация карт у пользователя, "open" : открыл пользователь карты или нет (булево), "won" : сколько пользователь выиграл за текущий раунд, "act" : действие с пользователем (continue, disconnect) }, ... ] Возвращает в случае успеха: JSON {
  • 17. "success" : { "players": [{ "token" : токен пользователя, "chips" : фишки пользователя, которые были добавлены пользователю в результате октлючения, "status" : статус пользователя }, ... ] } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Обновление статуса Запрос отправляется по окончанию раздачи. Содержит информацию об игроках и движении фишек внутри стола. Списание Адрес запроса: /logic/rooms/status_update Метод запроса: POST Ключи: Ключ Тип Значение code число Уникальный идентификатор стола players JSON Информация об игроках logs строка Логи игры в формате PokerStars Формат информации об игроках: JSON [ { "token": токен игрока за столом, "cards": строка со значениями карт в понятном формате, "combination": название комбинации "status": статус игрока может быть active/vabank/fold/disconnected, "won": сумма выигрыша или проигрыша (отрицательное значение), "chips": новое количество фишек, "open" : открыл пользователь карты или нет (булево), "act" : действие с пользователем (continue, disconnect) }, ... ]
  • 18. Возвращает в случае успеха: JSON { "success" : { "players": [{ "token" : токен пользователя, "chips" : фишки пользователя, которые были добавлены пользователю в результате октлючения, "status" : статус пользователя }, ... ] } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Запуск игры за столом Выполняем, чтобы дать знать серверу о начале новой игры за столом. Сервер фиксирует начальное количество игроков. Для турнирных столов происходит заполнение предварительной информации о выигранных местах Списание Адрес запроса: /logic/rooms/start/<code> Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "items": [{ "code": числовой код стола, "type_code":тип (POKER), "rule_code": правило (CLASSIC), "ante": антэ (число), "max_currency": максимум стола (число), "max_players": максимальное количество игроков (число), "pace": темп игры (NORMAL), "pace_in_secs": время на ход в секундах "style": стиль стола (NORMAL),
  • 19. "server_code": путь до стола, "players_amount": количество игроков, "round": номер последнего раунда "players": [{ "token": токен пользователя, "user_name": имя пользователя, "seat_number": номер места }, ... ], "viewers": [{ "token": токен пользователя, "user_name": имя пользователя, "seat_number": номер места }, ... ] }, ... ] } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Состояние игры за столом Возвращает возможные для выигрыша места за столом и какие места уже занимают пользователи. Сколько фишек было получено пользователем. Списание Адрес запроса: /logic/rooms/ranks/<code> Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "success": [{ "rank": место для выигрыша за столом, "part":какая часть призового фонда полагается за занятое место (в процентах), "user_id": id пользователя, занявнешего указанное место,
  • 20. "user_rank": реально занаятое место (пример: 2 пользователя одновременно закончивают играть на местах (rank) 3 и 4. В этом случае один из них займет rank = 4, второй rank = 3, но реальные места у обоих будут 4), "user_won": сколько пользователь выиграл }, ... ] } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Интеграция с соц.сетями. Принцип работы заключается в генерации пути к соц.сети, переход по которому приводит к авторизации в соц.сети. После этого перехватывается code, который возвращается соц.сетью. Указанный выше код используется для подключения сервера к соц.сети и получения информации о пользователе. Полученные данные используются для определения пользователя в системе или его создания (в случае отсутствия). Facebook Запрос ключей Адрес запроса: /integration/fb/keys Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "success": { "app_id": id приложения, "login_url":путь, по которому необходимо направить запрос } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки,
  • 21. "message": описание ошибки на языке интерфейса } } Login Адрес запроса: /integration/fb/login Метод запроса: GET Ключи: Ключ Тип Значение code строка Код, который вернула соц.сеть lang [ru,en,kz,ua] Язык клиента client_name строка Название клиента из таблицы user_interface, поле name client_version число Версия клиента из таблицы user_interface, поле version Возвращает в случае успеха: JSON { "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число), "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя, "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение, "PROGRESS": прогресс } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } }
  • 22. ВКонтакте Запрос ключей Адрес запроса: /integration/vk/keys Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "success": { "app_id": id приложения, "login_url":путь, по которому необходимо направить запрос } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Login Адрес запроса: /integration/vk/login Метод запроса: GET Ключи: Ключ Тип Значение code строка Код, который вернула соц.сеть lang [ru,en,kz,ua] Язык клиента client_name строка Название клиента из таблицы user_interface, поле name client_version число Версия клиента из таблицы user_interface, поле version Возвращает в случае успеха: JSON { "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число),
  • 23. "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя, "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение, "PROGRESS": прогресс } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Одноклассники Запрос ключей Адрес запроса: /integration/od/keys Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "success": { "app_id": id приложения, "login_url":путь, по которому необходимо направить запрос } } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Login Адрес запроса: /integration/od/login Метод запроса: GET Ключи:
  • 24. Ключ Тип Значение code строка Код, который вернула соц.сеть lang [ru,en,kz,ua] Язык клиента client_name строка Название клиента из таблицы user_interface, поле name client_version число Версия клиента из таблицы user_interface, поле version Возвращает в случае успеха: JSON { "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число), "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя, "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение, "PROGRESS": прогресс } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Google+ Запрос ключей Адрес запроса: /integration/gp/keys Метод запроса: GET Ключи: отсутствуют Возвращает в случае успеха: JSON { "success": { "app_id": id приложения, "login_url":путь, по которому необходимо направить запрос } }
  • 25. Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } } Login Адрес запроса: /integration/gp/login Метод запроса: GET Ключи: Ключ Тип Значение code строка Код, который вернула соц.сеть lang [ru,en,kz,ua] Язык клиента client_name строка Название клиента из таблицы user_interface, поле name client_version число Версия клиента из таблицы user_interface, поле version Возвращает в случае успеха: JSON { "id": идентификатор игрока "token": токен пользователя "name" : имя пользователя, "chips": количество фишек, "bonus": количество бонусов, "level": уровень игрока (число), "level_title": название уровня игрока, "HANDS_WON": выиграно раздач, "HANDS_PLAYED": раздач сыграно, "USERPIC": картинка пользователя, "LAST_PURCHASE": последняя покупка, "LAST_ACHIEVEMENT": последняя достижение, "PROGRESS": прогресс } Возвращает в случае ошибки: JSON { "error": { "code": код ошибки, "message": описание ошибки на языке интерфейса } }
  • 26. Логика турниров В турнире каждый стол имеет определенную стоимость. До начала турнира со всех участников списывается стоимость стола, из этих средств формируется призовой фонд турнира. После начала турнира блокируется добавление новых игроков. Правило игры (rule_code) для турнирного стола равно «CLASSIC_TRN». Специальных запросов для работы турниров не требуется. Запуск и завершение выполняется в процессе обычной работы со столами.
  • 27. Сервис подарков ­gifts. php Адрес: http://pokerapi.3d-game.com:6680/gifts.php Постоянные параметры: id ­user_ id текущего юзера token ­актуальный токен текущего юзера Функции: cmd=shop ­возврат ассортимента магазина Дополнительные параметры функции ­нет. Возврат: {“status”: 0, “shop”: [{“id”:6, “name”: ”Sombrero”, “dic_description”: “”, “lname”: “Сомбреро”, “ldesc”: “Мексиканская шляпа”, “image_base_name”: “http://pokerapi.3d­game. com/images/goods/sombrero.png”}, {...}] } cmd=price ­получение строк прайса по заданному товару Дополнительные параметры: item ­id товара Возврат: {“status”:0, “price”:[ {“id”: 1, “account_type_code”: “bonus”, “amount”: 10, “duration” :0}, {“id”:2, “account_type_code”: “chips”, “amount”: 1000, “duration”: 7}, {...} ]} cmd=gift ­купить подарок с передачей другому пользователю Дополнительные параметры: qty ­количество, по умолчанию =1 to ­user_ id друга, которому надо подарить pos ­позиция в прайсе, по которой делается покупка (id из возврата функции price) Возврат: {“status” : 0, “description”: “ok”} если status > 0, description содержит описание ошибки.
  • 28. Сервис сообщений ­messenger. php Адрес: http://pokerapi.3d­game. com:6680/messenger.php (GET / POST) Постоянные параметры: uid = user_id текущего пользователя token = токен текущего пользователя Функции: ● Получение списка сообщений (дефолтная функция) Дополнительные параметры функции: last_msg ­unix­время, будут получены только сообщения новее этого времени, если есть. При 0 или отсутствии параметра ­читаем все. unread=1 ­признак запроса только непрочитанных сообщений. Если нужны все сообщения ­этого параметра быть не должно. (примечание: значение параметра игнорируется, нужен только факт его наличия) type=1 ­читать только сообщения заданного типа. В настоящее время есть следующие типы: 0 ­сообщение пользователь­пользователь, 1 ­сообщение система­пользователь, 2 ­запрос на добавление в список друзей, 4 ­уведомление о начислении бонуса page=N ­постраничный вывод, сообщения разбиваются на страницы по 20 штук. Страница номер 0 содержит самые свежие сообщения. Формат сообщения: {“status”: 0, “count”: 3, “unread”: 1, “last_msg”:112349844, “messages”: [{"id":"349","msg_time":"1406225220","user_id":"109","name":"Gleb Daniloff","text":"w.level","is_readed":"f","msg_type":"1"},{...}] } status ­0 означает отсутствие ошибок, count ­общее количество сообщений, отправленных данному юзеру, включая прочитанные, unread ­количество непрочитанных сообщений, адресованных юзеру. last_msg ­текущее время сервера, может быть использовано в следующем запросе. id ­идентификатор сообщения, msg_time ­время сообщения, user_id ­идентификатор отправителя (для системных равен идентификатору получателя), name ­имя отправителя (для системных ­имя получателя), text ­текст сообщения, is_readed ­логическое, флаг прочтения, msg_type ­тип сообщения ● Пометить сообщения прочитанными read=101 или read=4;5;7;9;34;65;78 (примечание: получатель сообщений не проверяется) ● Отправить сообщение игроку Дополнительные параметры функции: ❖ to=66 ­user_ id получателя (обязательный параметр) ❖ text=ваше сообщение (обязательный параметр) Ответ: {“satus”:0, ”msg_id”:988} где msg_id ­идентификатор вновь созданного сообщения ● Получить информацию об ожидающих сообщениях, не забирая сами сообщения Дополнительный параметры функции:
  • 29. ❖ info=1 Приходит ответ следующего вида: [{type:0, id:123, count:2}, {type:1, count:12}, {type:2, count:20}] ● Получить список пользователей, с которыми был обмен сообщениями ❖ info=2 Приходит ответ следующего вида: {“status”:0, “users”:[{“id”:NNN,”name”:”user_name”,”state”:”offline”, “userpic”: “http://...”, “level”:4},{...},...] }
  • 30. Сервис друзей ­friends. php Адрес: http://pokerapi.3d­game. com:6680/friends.php (GET / POST) Постоянные параметры: me = user_id текущего пользователя token = токен текущего пользователя cmd = код команды Функции: ● Получение диалога [cmd=history] Дополнительные параметры ❖ page=0 ­текущая страница (0 ­самые новые) ❖ id = user_id друга Получаемый ответ: {"status"=>0,"count":25,"pages":3,"messages":[{id, msg_time, u_from, name, text, is_readed},{...}]); ● Запрос списка друзей [cmd=list] Дополнительные параметры: нет Получаемый ответ: { “status”:0 “friends”: [{“id", "chips", "bonus", "level", "name", "accepted", "userpic", "status"},{...}] }
  • 31. Сервис информации о пользователях userinfo.php Адрес: http://pokerapi.3d­game. com:6680/userinfo.php (GET / POST) Постоянные параметры: uid = user_id текущего пользователя token = токен текущего пользователя cmd = код команды Функции: ● Поиск пользователя [cmd=find] Дополнительные параметры ❖ text ­искомый текст (логин, e­mail или user_id) Получаемый ответ: {"status":0, “users”: [{"uid":NUM, "name":”user_name”, "level":NUM, "userpic":URL, "state":”offline”|”online”|”ingame;TABLE”},{...},...]} Примечание: поиск регистронезависимый. Если text содержит цифровое значение, осуществляется поиск по точному совпадению по user_id, иначе ­в случае соответствия текста шаблону адреса ­по точному совпадению с e­mail, в противном случае ­по первым буквам логина. ● Изменение личных данных пользователя [cmd=save] Дополнительные параметры ❖ uname ­новое отображаемое имя пользователя; ❖ upass ­новый пароль, нешифрованный; ❖ oldpass ­текущий пароль, нешифрованный (необходим только при наличии параметра upass); ❖ email ­новый адрес почтового ящика ❖ userpic ­картинка пользователя (jpg/png/gif) Примечание: любой из параметров может отсутствовать. Обязателен хотя бы один параметр. При наличии картинки данные должны передаваться по протоколу POST:multipart/form­data. При отсутствии картинки допустима кодировка POST:application/x­www­form­urlencoded.