Список доступных API

Содержание

  1. API для работы с HTML5 играми
  2. Другие API игрового сервера
  3. Примеры реализации и интеграции
  4. API игровых нотификаций

API для работы с HTML5 играми

Отображать наши игры на своем сайте просто. Для этого нужно иметь как минимум 1 активный терминал ( логин и пароль ).
Шаги интеграции описаны ниже

ШАГ1 - Получить список доступных Html5 игр

Для получения списка активных игр воспользуйтесь командой


HTTPS GET apiserver.solutions/remote_games_web


АПИ возвращает json массив следующей структуры:

		<actualdate>2017-06-30 06:15:17</actualdate>
		<gamescount>120</gamescount>
		<gamelist>МАССИВ_ИГР</gamelist>


Где gamescount - количество доступных игр , gamelist - содержит массив игр, разделенный на категории.
Каждая категория ( family ) содержит айди (id), имя категории (name), и подмассив игр (games)
Каждая игра в подмассиве games содержит айди игры (id), имя игры (name), веб ссылку на иконку (icon), а также размеры в пикселях (width и height )

ШАГ2 - Получить сессию пользователя

Чтобы запустить игру на своем сайте, кроме ее айди, нужно также иметь активную сессию пользователя (терминала) Для получения сессии воспользуйтесь АПИ сессий, командой "set"
Пример данных для отправки :


<request>
<version>0.6</version>
<user_id>125</user_id>
<user_password>31003sdfds</user_password>
<operation>set</operation>
<show_packet>1</show_packet>
<response_url></response_url>
</request>


При успешном ответе вы получите массив данных терминала, в котором будут параметры активной сессии:
sessionid - айди сессии, key1, key2 - ключи
Полный пример работы с апи сессий смотрите в соответствующем разделе

ШАГ3- Отобразить игру на своем сайте

После предыдущих двух шагов у вас есть активная сессия терминала и список игр.
Для отображения игры по ее номеру воспользуйтесь командой


HTTPS GET apiserver.solutions/showgame?gameid=GAMEID&sid=SID&key1=KEY1&key2=KEY2


где GAMEID - айди желаемой игры, SID, KEY1, KEY2 - параметры сессии
В ответ вы получите окно с игрой оригинального размера. Вы можете поместить его в попап окно на своем сайте или во встроенный фрейм, уменьшив пропорционально размеры при необходимости. Дополнительно также можно передать параметр языка LANG, доступные значения английский (en) и русский (ru)

Другие API игрового сервера

Работа с API

Работа с API осуществляется по протоколу https, отправкой XML-запроса методом POST на URL требуемого API.

Пошаговая инструкция:

  1. Вам необходимо сформировать подпись XML-запроса. Есть три варианта подписи:
    • тип 1 md5(hall_secret + XML_запрос (строка) + hall_secret), где hall_secret - секретное слово зала (API работы с залами)
    • тип 2 base64_encode(agent_password), где agent_password – пароль агента (API работы с агентами)
    • тип 3 md5(user_password + XML_запрос (строка) + user_password), где user_password - пароль терминала (API работы с логами игр,апи сессий)
  2. XML-запрос данных должен быть вида $xml = '<request>XML данные</request>';
  3. Затем нужно упаковать XML-запрос функцией base64_encode и отправить его на указанный URL методом POST: поле reg_xml => base64_encode(XML_запрос), поле reg_sign => подпись
  4. В ответ, в случае успешного запроса, вы получите упакованный функцией base64_encode XML-пакет и подпись пакета. Описание полей ответа в каждом разделе описания API. Общий формат ответа приведен ниже:
    <request>
    	<version>0.6</version>
    	<status>success</status>
    	<time>метка времени (unix_timestamp)</time>
    	...
    </request>
    		
  5. В случае какой-либо ошибки, ответ будет содержать 4 поля — version, status, hall_id (если не задан — 0), code (будет содержать код ошибки). Общий формат ответа приведен ниже:
    <request>
    	<version>0.6</version>
    	<status>failure</status>
    	<time>метка времени (unix_timestamp)</time>
    	...
    </request>
    		

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml, reg_sign) не найдено в POST запросе
required_fields_are_empty Не все обязательные параметры присутствуют в XML пакете
invalid_xml_format Неверно сформирован XML-документ запроса
wrong_signature Неверная подпись пакета
wrong_api_version Версия API указана неверно

Получение списка игр

Доступно три различных списка игр:

  1. https://apiserver.solutions/remote_games_list_new – возвращает минимум 16 новых игр;
  2. https://apiserver.solutions/remote_games_list_pop – возвращает минимум 16 самых популярных игр;
  3. https://apiserver.solutions/remote_games_list – возвращает все доступные игры.

Списки игр можно получить в трёх различных форматах: XML, JSON и JavaScript. По умолчанию данные выдаются в формате XML. Для указания формата выдачи необходимо передать в строке запроса параметр format со значениями xml, json или javascript.

Пример выдачи для запроса https://apiserver.solutions/remote_games_list_new?format=json (формат JSON):

{"family":{"id":99,"name":"new","games":[{"id":220,"name":"wickedwinnings3","icon":"https://apiserver.solutions/img/tote/games/cf_all/220.jpg","isaristocrat":1,"gametype":11,"url":"https://apiserver.solutions/tote_opbetting3?gameid=220&x=859163386","width":1024,"height":768},{"id":219,"name":"TimberWolf","icon":"https://apiserver.solutions/img/tote/games/cf_all/219.jpg","isaristocrat":1,"gametype":11,"url":"https://apiserver.solutions/tote_opbetting3?gameid=219&x=1162627997","width":1024,"height":768}]}}

Пример выдачи для запроса https://apiserver.solutions/remote_games_list_new?format=javascript (формат JavaScript):

var casinoData = {"family":{"id":99,"name":"new","games":[{"id":220,"name":"wickedwinnings3","icon":"https://apiserver.solutions/img/tote/games/cf_all/220.jpg","isaristocrat":1,"gametype":11,"url":"https://apiserver.solutions/tote_opbetting3?gameid=220&x=859163386","width":1024,"height":768},{"id":219,"name":"TimberWolf","icon":"https://apiserver.solutions/img/tote/games/cf_all/219.jpg","isaristocrat":1,"gametype":11,"url":"https://apiserver.solutions/tote_opbetting3?gameid=219&x=1162627997","width":1024,"height":768}]}};

Пример выдачи для запроса https://apiserver.solutions/remote_games_list (формат XML):

<?xml version = "1.0" encoding = "utf-8" ?>
<root>
	<data>
		<actualdate>2014-12-12 06:15:17</actualdate>
		<gamescount>84</gamescount>
		<config>https://apiserver.solutions/flashconfig.php</config>
	</data>
	<gamelist>
		<family id="6" name="coolfire 2">
			<game>
				<id>211</id>
				<name>dragonemperor</name>
				<icon>https://apiserver.solutions/img/tote/games/cf_all/211.jpg</icon>
				<width>1024</width>
				<height>768</height>
				<url>https://apiserver.solutions/tote_opbetting3?gameid=211&x=353750879</url>
			</game>
			<game>
				<id>210</id>
				<name>diamonddestiny</name>
				<icon>https://apiserver.solutions/img/tote/games/cf_all/210.jpg</icon>
				<width>1024</width>
				<height>768</height>
				<url>https://apiserver.solutions/tote_opbetting3?gameid=210&x=804659655</url>
			</game>
			...
		</family>
		...
	</gamelist>
</root>

Список новых игр и список популярных игр имеют похожую структуру, но у каждого блока <game> (описание игры) есть дополнительное поле isaristocrat (см. подробнее в разделе Структура списка игр):

<game>
	<id>206</id>
	<name>50lions</name>
	<icon>https://apiserver.solutions/img/tote/games/cf_all/206.jpg</icon>
	<width>1024</width>
	<height>768</height>
	<url>https://apiserver.solutions/tote_opbetting3?gameid=206&x=2045331503</url>
</game>

Данные по спискам игр кэшируются на сервере. Кэш обновляется каждые 60 минут.


Структура списка доступных игр

Структура ответа API на получение списка игр содержит следующие блоки и параметры:

data – общие данные:

  1. actualdate – дата и время генерирования данного списка на стороне сервера
  2. gamescount – количество игр в данном наборе
  3. config – путь к конфигурации для флеш загрузчика

family – описание категории игр, к которой принадлежит данный слот:

  1. id – ID категории
  2. name – название категори
  3. games – список игр

game – набор параметров для каждой конкретной игры:

  1. id – ID игры
  2. name – название игры
  3. icon – ссылка на иконку игры
  4. url – ссылка на игру
  5. width – ширина игрового окна
  6. height – высота игрового окна
  7. isaristocrat – если данный параметр равен 1, то игра относится к семейству aristocrat (опциональный параметр).

Список новых игр содержит лишь одну категорию name="new", у которой id=99. Список самых популярных игр также содержит лишь одну категорию name="popular" с id=77. Список всех игр содержит все доступные категории игр, кроме id=99 и id=77, поскольку данные категории являются собирательными категориями (новые и популярные игры).

Регистрация пользователя

Регистрация пользователя осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_reg

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID зала
name string Нет Имя пользователя. Не менее 6 символов. Если поле не задано, то имя пользователя будет сгенерировано автоматически.
phone bigint Нет Номер телефона. Только цифры, без пробелов и знака "+".
email string Нет email пользователя. Если не задан, то генерируется автоматически.
ex_id integer Нет ID пользователя в базе данных клиента
operation_id bigint Нет Идентификатор операции в системе пользователя. Идентификатор операции используется для повторной отправки пакета. Для идентификаторов допускается тип данных только biging. В случае, если тип не bigint - операция не логируется и повторная отправка операции невозможна!
password string Нет Пароль пользователя. Не менее 6 знаков. Если не задан, то генерируется автоматически. Пароль может содержать только латинские буквы и цифры. В случае наличия в пароле других символов, они будут обрезаны системой.
birthDay,
birthMonth,
birthYear
integer Нет Дата рождения пользователя. Параметры должны задавать корректную дату. Если дата некорректна, то система выдаст ошибку операции. Пример: birthDay=01, birthMonth=05, birthYear=1980
address string Нет Адрес пользователя
country string Нет Страна пользователя
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_userslist методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

<?php
	//Формируем цифровую подпись
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//Кодируем XML-запрос с помощью функции base64_encode
	$base64_result = base64_encode($XML_REQUEST);

	//Создаём массив с переменными, которые будем отправлять на удалённый сервер
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//Инициализация cURL
	$ch = curl_init();

	//Задаем параметры для cURL
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_reg');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//Передаём в cURL переменные для отправки
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//Включаем SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//Выполняем передачу запроса
	$result = curl_exec($ch);
?>

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
hall_id integer ID зала пользователя
login string Логин пользователя
password string Пароль пользователя
email string e-mail пользователя
phone bigint Телефон пользователя
time bigint Метка времени в формате UNIX timestamp
birthDay,
birthMonth,
birthYear
integer Дата рождения пользователя
operation_id bigint Идентификатор операции в системе пользователя
country string Страна пользователя
address string Адрес пользователя
operation_exist smallint Флаг, который показывает, была ли операция проведена в первый раз или же это отправка повторного пакета. Возможные значения 0 или 1.
is_first_deposit smallint Первый депозит в системе или нет. Возможные значения 0 или 1.
is_first_enter smallint Первый вход. Возможные значения 0 или 1.

В случае ошибки, ответ сервера будет содержать 4 поля: version, status, hall_id + поле code (будет содержать код ошибки). Поле code может иметь следующие значения:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml, req_sign) не найдено в POST запросе
invalid_xml_sended Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная цифровая подпись запроса
wrong_api_version Версия API указана неверно
hall_not_exist Зал не существует
hall_id_format_invalid Неверный формат поля hall_id
wrong_email Неверный формат email
phone_format_invalid Неверный формат поля phone
user_phone_already_exist Такой телефон уже зарегистрирован в системе
wrong_password Неверный пароль
wrong_birthdate_params Неверный формат даты рождения (параметры birthDate, birthMonth, birthYear)

Пример данных исходящего XML-запроса:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<phone>310903377415</phone>
	<birthDay>02</birthDay>
	<birthMonth>05</birthMonth>
	<birthYear>1980</birthYear>
	<address>some address</address>
	<password>sdgf55123</password>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

Пример данных ответа сервера:

<request>
	<version>0.6</version>
	<login>95745</login>
	<password>sdf55yhh</password>
	<email>mRXqMXcrfD@stargamecasino.com</email>
	<phone>3808053344000</phone>
	<birthdate></birthdate>
	<hall_id>25</hall_id>
	<operation_id></operation_id>
	<operation_exist>0</operation_exist>
	<status>success</status>
	<time>1390778516</time>
	<ex_id></ex_id>
	<is_first_deposit>1</is_first_deposit>
	<is_first_enter>0</is_first_enter>
	<is_passing>0</is_passing>
</request>

Пример ответа в случае ошибки:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>user_phone_already_exist</code>
	<hall_id>125</hall_id>
</request>

Удалённое управление сессиями пользователей

Удалённое управление сессиями пользователей осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/remotecab_session

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
user_id integer Да ID пользователя
user_password string Да Пароль пользователя
operation string Да Выполняемая операция.
get - получение сессии пользователя
set - создание новой сессии
check - проверка состояния сессии. Если сессия закрыта, то создается новая.
close - закрытие всех сессий
sessionid bigint Да ID сессии (необходимо для операции get)
key1 integer Да Ключ сессии (необходимо для операции get)
key2 integer Да Ключ сессии (необходимо для операции get)
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(ПАРОЛЬ_ТЕРМИНАЛА + XML-запрос (строка) + ПАРОЛЬ_ТЕРМИНАЛА). В языке PHP для данной операции используется функция md5

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/remotecab_session методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

<?php
	//Формируем цифровую подпись
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//Кодируем XML-запрос с помощью функции base64_encode
	$base64_result = base64_encode($XML_REQUEST);

	//Создаём массив с переменными, которые будем отправлять на удалённый сервер
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//Инициализация cURL
	$ch = curl_init();

	//Задаем параметры для cURL
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/remotecab_session');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//Передаём в cURL переменные для отправки
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//Включаем SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//Выполняем передачу запроса
	$result = curl_exec($ch);
?>

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
time bigint Метка времени в формате UNIX timestamp
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
uid integer ID аккаунта
password string Пароль пользователя
sessionid bigint ID сессии (для всех операций, кроме close)
key1 integer Ключ сессии (для всех операций, кроме close)
key2 integer Ключ сессии (для всех операций, кроме close)
name string Имя пользователя (только для операций get и create)
roomnumber integer ID зала (только для операций get и create)
email string e-mail пользователя (только для операций get и create)
phone bigint Телефон пользователя (только для операций get и create)
birthdate timestamp Дата рождения пользователя (только для операций get и create)
balance bigint Баланс пользователя (только для операций get и create)
currency string Валюта зала (только для операций get и create)
unique_id string Уникальный ID пользователя (только для операций get и create)
is_first_deposit smallint Первый депозит в системе или нет (только для операций get и create). Возможные значения 0 или 1.
is_first_enter smallint Первый вход (только для операций get и create). Возможные значения 0 или 1.
is_passing smallint Может ли пользователь пополнять счет через удаленный сайт (только для операций get и create)
is_home boolean Имеет зал статус homeedition или нет. Устаревший параметр для обратной совместимости с устаревшими версиями API (только для операций get и create)

В случае ошибки, ответ сервера будет содержать 4 поля: version, status, hall_id + поле code (будет содержать код ошибки). Поле code может иметь следующие значения:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml, req_sign) не найдено в POST запросе
wrong_api_version Версия API указана неверно
invalid_xml_sended Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
no_path_to_send_packet Не указан путь для ответа сервера
wrong_session_data Неверно указаны данные сессии
wrong_user_data Неверный пароль или id пользователя

Получение баланса пользователя

Получение баланса пользователя осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_get_balance

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
user_id integer Да ID пользователя
hall_id integer Да ID игрового зала
user_ex smallint Нет Если равно 1, то получить данные о пользователе, используя ex_id (внешный ID пользователя в базе данных клиента). По умолчанию значение равно 0.
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_userslist методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

<?php
	//Формируем цифровую подпись
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//Кодируем XML-запрос с помощью функции base64_encode
	$base64_result = base64_encode($XML_REQUEST);

	//Создаём массив с переменными, которые будем отправлять на удалённый сервер
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//Инициализация cURL
	$ch = curl_init();

	//Задаем параметры для cURL
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_get_balance');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//Передаём в cURL переменные для отправки
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//Включаем SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//Выполняем передачу запроса
	$result = curl_exec($ch);
?>

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки (только в случае возникновения ошибки)
hall_id integer ID зала пользователя
time bigint Метка времени в формате unix timestamp
user_id integer ID пользователя
balance bigint Баланс пользователя в кредитах

В случае возникновения ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_userid Неверный user_id
user_not_isset Пользователь не существует
wrong_signature Секретное слово зала указано неверно
wrong_api_version Версия API указана неверно
hall_not_exist Зал не существует

Пример данных исходящего XML-запроса:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<user_id>345</user_id>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

Пример данных ответа сервера:

<request>
	<version>0.6</version>
	<status>success</status>
	<user_id>10025</user_id>
	<hall_id>129</hall_id>
	<balance>2924316</balance>
	<time>1390780004</time>
</request>

Пример ответа в случае ошибки:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>hall_not_exist</code>
	<hall_id>125</hall_id>
</request>

Операции с балансом пользователя

Операции с балансом пользователя осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_operation_balance

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
user_id integer Да ID пользователя
hall_id integer Да ID игрового зала
user_ex smallint Нет Если равно 1, то получить данные о пользователе, используя ex_id (внешный ID пользователя в базе данных клиента). По умолчанию значение равно 0.
operation string Да Тип проводимой операции:
increase - пополнение счёта,
decrease - списание средств со счёта,
decrease_all - полное обнуление счёта.
ВАЖНО: следует помнить, что при обнулении все средства со счёта пользователя списываются. Однако, скрипт проверяет наличие поля sum. В поле sum необходимо отправлять значение 0.
operation_id bigint Нет Идентификатор операции в системе пользователя. Идентификатор операции используется для повторной отправки пакета. Для идентификаторов допускается тип данных только biging. В случае, если тип не bigint - операция не логируется и повторная отправка операции невозможна!
sum integer Да Сумма пополнения и сумма списания при соответствующих операциях. Сумма не может быть больше баланса зала при пополнении и больше баланса пользователя при списании.
user_password string Нет Пароль пользователя
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_userslist методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

<?php
	//Формируем цифровую подпись
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//Кодируем XML-запрос с помощью функции base64_encode
	$base64_result = base64_encode($XML_REQUEST);

	//Создаём массив с переменными, которые будем отправлять на удалённый сервер
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//Инициализация cURL
	$ch = curl_init();

	//Задаем параметры для cURL
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_operation_balance');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//Передаём в cURL переменные для отправки
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//Включаем SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//Выполняем передачу запроса
	$result = curl_exec($ch);
?>

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
hall_id integer ID зала пользователя
user_id integer ID пользователя
balance integer Баланс пользователя в кредитах
time bigint Метка времени в формате UNIX timestamp

В случае ошибки, ответ сервера будет содержать 4 поля: version, status, hall_id + поле code (будет содержать код ошибки). Поле code может иметь следующие значения:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml, req_sign) не найдено в POST запросе
invalid_xml_sended Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная цифровая подпись запроса
wrong_api_version Версия API указана неверно
wrong_userid Неверный user_id
user_not_isset Пользователь не существует
hall_not_exist Зал не существует
operator_not_isset Оператора в зале не существует
wrong_password Неверный пароль
too_low_balance_for_increase Указано слишком маленькое значение изменения баланса
too_low_hall_balance Баланса зала недостаточно для проведения операции
previous_payments_not_finished Предыдущие платёжные операции пользователя не завершены
wrong_incoming_data Внутренняя ошибка при изменении баланса
operation_not_set Поле operation не задано

Пример данных исходящего XML-запроса:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<user_id>345</user_id>
	<operation>increase</operation>
	<sum>500</sum>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

Пример данных ответа сервера:

<request>
	<version>0.6</version>
	<status>success</status>
	<user_id>10125</user_id>
	<hall_id>125</hall_id>
	<operation>increase</operation>
	<operation_id></operation_id>
	<old_balance>5000</old_balance>
	<new_balance>5500</new_balance>
	<operation_exist>0</operation_exist>
	<time>1390783078</time>
</request>

Пример ответа в случае ошибки:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>operation_not_set</code>
	<hall_id>125</hall_id>
</request>

Создание зала

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_create_hall

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_name string Да Имя зала
hall_secret string Да Секретное слово зала. Только латинские буквы и цифры. Максимальная длина 32 символа.
agent_id integer Да Идентификатор агента
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде Base64 строки по следующей схеме: BASE64(ПАРОЛЬ_АГЕНТА). В языке PHP для данной операции используется функция base64_encode:

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
hall_id integer ID созданного зала
currency smallint Присвоенный ISO код валюты

В случае ошибки, ответ сервера будет содержать 4 поля: version, status, hall_id + поле code (будет содержать код ошибки). Поле code может иметь следующие значения:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml, req_sign) не найдено в POST запросе
invalid_xml_sended Неверно сформирован XML-запрос
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная цифровая подпись запроса
wrong_api_version Версия API указана неверно
agent_not_exist Агент не существует
hall_name_already_exists Зал с таким именем уже существует
hall_data_empty Не указано имя зала

Пример данных исходящего XML-запроса:

<request>
	<version>0.6</version>
	<hall_name>MyNewHall</hall_name>
	<hall_secret>fgghhjjuku</hall_secret>
	<agent_id>12345678</agent_id>
	<response_url></response_url>
</request>

Пример данных ответа сервера:

<request>
	<version>0.6</version>
	<status>success</status>
	<time>123456789</time>
	<hall_id>114</hall_id>
	<hall_secret>somecode</hall_secret>
	<currency>643</currency>
</request>

Получение списка терминалов зала

Получение списка терминалов зала осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_get_userslist

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID игрового зала
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку по адресу https://apiserver.solutions/api_get_userslist методом POST. Строка помещается в параметр reg_xml.

<?php
	//Кодируем XML-запрос с помощью функции base64_encode
	$base64_result = base64_encode($XML_REQUEST);

	//Создаём массив с переменными, которые будем отправлять на удалённый сервер
	$post_request = array('reg_xml' => $base64_result);

	//Инициализация cURL
	$ch = curl_init();

	//Задаем параметры для cURL
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_get_userslist');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//Передаём в cURL переменные для отправки
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//Включаем SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//Выполняем передачу запроса
	$result = curl_exec($ch);
?>

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
hall_id integer ID зала пользователя
time bigint Метка времени в формате unix timestamp
users_count integer Количество пользователей
users array Массив с детализированной информацией о пользователях

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
hall_not_exist Зал не существует

Пример данных исходящего XML-запроса:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

Пример данных ответа сервера:

<request>
	<version>0.6</version>
	<status>success</status>
	<hall_id>125</hall_id>
	<time>1390568302</time>
	<users_count>2</users_count>
	<users>
		<user><uid>30359</uid>
			<name>protest1</name>
			<password>fxa445</password>
			<balance>347</balance>
		</user>
		<user><uid>308905</uid>
			<name>protest2</name>
			<password>4454599</password>
			<balance>4004</balance>
		</user>
	</users>
</request>

Пример ответа в случае ошибки:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>wrong_signature</code>
	<hall_id>250</hall_id>
</request>

Изменение конфигурации зала

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_hall_settings

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID зала
operation string Да Операция: get - получение массива с текущими настройками, set - обновление настроек
settings array Да Массив настроек. Требуется только для операции set
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

Описание настроек параметра settings для операции set:

Имя параметра Тип Описание Допустимые значения
maxbetperline Максимальная ставка на линию integer 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30,40, 50, 100
maxwin Максимальный выигрыш на барабанах integer Расчет по формуле: не менее чем maxbetperline * 500
maxriskwin Максимальный выигрыш в риск игре integer Расчет по формуле: не менее чем maxbetperline * 500
creditlimit Лимит кредитов integer От 100 до 1000000
matproc Математический процент отдачи integer 85, 88, 93, 95, 98
maxriskround Максимальное количество раундов в риск игре integer От 2 до 100
denominationenable Включена ли деноминация boolean 1 или 0
denominationminval Деноминация MIN float 0.01, 0.02, 0.04, 0.05, 0.1, 0.25, 0.5, 0.75,1.00
denominationmaxval Деноминация MAX float 0.25, 1.00, 2.00, 4.00, 5.00, 10.00, 25.00, 50.00, 100.00
minamount Минимальная сумма к выплате integer Не может быть менее или равным 0
pbonus Процент от депозита в бонус integer От 0 до 15
mbonus Минимальный депозит для бонуса integer Не может быть менее или равным 0
fixedcashback Фиксированный кешбек бонус integer 1 (включен) or 0 (выключен) . Если включен кешбек или фиксированный кешбек, депозит бонус будет обнулен

Следует заметить, что возможно изменение отдельных настроек, т.е. нет необходимости для изменения одной настройки перечислять все остальные. В таком случае, просто укажите необходимые настройки в пакете settings, не указывая остальные. Операция get возвращает все настройки.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
hall_id integer ID зала
operation string Операция: get или set
time bigint Метка времени в формате UNIX timestamp
settings array Список текущих настроек зала. Только для операции get.

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
hall_not_exist Зал не существует
too_low_maxwin maxwin < winMinLimit или maxwin < 100
too_big_maxwin maxwin > 1000000
too_low_maxriskwin maxriskwin < winMinLimit или maxriskwin < 100
too_big_maxriskwin maxriskwin > 1000000
wrong_creditlimit_count creditlimit < 100 или creditlimit > 1000000
wrong_maxriskround_count maxriskround < 2 или maxriskround > 100
wrong_denominationmin_count Значение denominationminval не входит в диапазон (1, 2, 4, 5, 10, 25, 50, 75, 100)
wrong_denominationmax_count Значение denominationmaxval не входит в диапазон (25, 100, 200, 400, 500, 1000, 2500, 5000, 10000)
denmin_biggest_than_denmax denominationmaxval < denominationminval
wrong_pbonus_count pbonus < 0 или pbonus > 15
wrong_mbonus_count mbonus < 0
nothing_to_update Массив настроек пуст (нет значений для обновлений)

Операции с сообщениями зала

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_hall_message

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID зала
operation string Да Операция: add - добавление сообщения, delete - удаление сообщение
text string Да (операция add) Текст сообщения. Максимальная длина 255 символов. Буквы латинского алфавита, кириллица и цифры.
repeat integer Да (операция add) Количество повторов сообщения. Допустимые значения: от 1 до 100.
send_type string Да (операция add) Тип вывода. Возможные значения: time_repeat - разовый с повторением, regular - регулярный (cм. пояснения после таблицы).
schedule array Да (операция add) Сериализованный base64 массив, форматы для операций различаются (cм. пояснения после таблицы).
message_id integer Да (операция delete) ID удаляемого сообщения.
show_packet smallint Да (если не задан response_url) Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да (если не задан show_packet) Адрес, на который будет отправлен результат XML-запроса. Отправка производится методом POST.

Пример формирования массива schedule:

<?php

$shedule = base64_encode(serialize(array('dateFrom' => '2011-12-11', 'hours' => '11', 'minutes' => '20', 'interval' => 30)));

?>

Пример формирования массива send_type для типа one_time_repeat:

<?php

$send_type = array('dateFrom' => '2015-01-02', 'hours' => 12, 'minutes' => 20, 'interval' => 30);

?>

Допустимые значения для параметров данного массива: dateFrom - дата в формате ГГГГ-ММ-ДД, hours - от 0 до 24, minutes - от 0 до 59, interval - интервал отправки в минутах, допустимые значения: 10, 30, 60, 120, 180, 360, 1140, 2880.

Пример формирования массива send_type для типа regular:

<?php

$send_type = array('dateFrom' => '2015-01-02', 'dateTo' => '2015-02-02', 'interval' => 60);

?>

Допустимые значения для параметров данного массива: dateFrom - дата начала в формате ГГГГ-ММ-ДД, dateTo - дата окончания в формате ГГГГ-ММ-ДД, interval - интервал отправки в минутах, допустимые значения: 10, 30, 60, 120, 180, 360, 1140, 2880.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
time bigint Метка времени в формате UNIX timestamp
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
message_id integer ID добавленного или удалённого сообщения для операций add и delete соотвественно
hall_id integer ID зала

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
hall_not_exist Зал не существует
message_not_isset Сообщение с заданным ID не существует
message_fields_are_empty Параметры для добавления сообщения отсутствуют или заданы не все
text_too_big Длина сообщения больше 255 символов
unable_to_parse_schedule Невозможно распарсить расписание отправки сообщений. Параметр пустой, не сериализован или не закодирован в base64.
wrong_schedule_format Неверный формат расписания отправки сообщений ( параметры dateFrom,dateTo, hours, minutes, interval)
unknown_operation Неверно задана операция

Получение баланса зала

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_get_hall_balance

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID зала
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_hall_balance методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
hall_id integer ID зала пользователя
balance integer Баланс зала
time bigint Метка времени в формате UNIX timestamp

Получение баланса агента

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_get_agent_balance

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
agent_id integer Да ID агента
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде Base64 строки по следующей схеме: BASE64(ПАРОЛЬ_АГЕНТА). В языке PHP для данной операции используется функция base64_encode:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_agent_balance методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
agent_id integer ID агента
balance integer Баланс агента в копейках
time bigint Метка времени в формате UNIX timestamp

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
agent_not_exist Агент с заданным ID и паролем не существует
invalid_agent_id Неверный формат ID агента или не задан параметр

Операции с джекпотом зала

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_operation_jackpot

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID зала
operation string Да Тип операции: get_balance - запрос баланса (ВАЖНО: текущее значение указывается в сотых долях копейки), reset - обнуление джекпота, change - изменение значения джекпота, get_settings - получение массива настроек зала, set_settings - установка новых настроек, get_history - история джекпотов
settings array Да Массив настроек (только для операции set_settings)
period_start unix timestamp Да >Начала периода выборки. Формат ГГГГ-ММ-ДД ЧЧ:ММ:СС (временная зона UTC) . Только для операции get_history
period_end unix timestamp Да Конец периода выборки. Формат unix timestamp . Только для операции get_history
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_operation_jackpot методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

Описание настроек параметра settings для операции set_settings:

Имя параметра Тип Описание Допустимые значения
enable Включен ли джекпот smallint 0 или 1
jackpotpercent Процент с каждой ставки в джекпот float 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2
timer Таймер выпадения джекпота integer От 0 до 86399. Время в секундах. Допустим, вы хотите задать время 10:30:15. Итоговое должно быть 10*60*60+30*60+15
tunejackpot Применить основное значение к джекпоту smallint 0,1. Если параметр указан и равен 1, размер джекпота примет значение, равное параметру "основное значение " в момент запроса. Эту операцию нельзя будет отменить. Сумма, которая будет списана с зала, равна сумме разниц текущих значений джекпотов и их основных значений
interval_enabled Активировать время выпадения джекпота smaillint 0,1
interval_start Начальное время integer От 0 до 1440. Задается в минутах. Например , если начальное время 10:30, укажите 10*60+30
interval_end Конечное время integer От 0 до 1440. Задается в минутах. Например , если конечное время 12:30, укажите 12*60+30. Разница в интервале до и после должна быть больше 1 минуты
bronze,silver,gold,diamond 4 массива с настройками каждого уровня джекпота. array bronze - 1-й уровень (бронзовый джекпот), и так далее по порядку возрастания
outtext Текст сообщения, которое будет выводится на игровом терминале. string Допустимы только латинские символы, точка, запятая и восклицательный знак.

Описание массива каждого уровня джекпота

Имя параметра Тип Описание Допустимые значения
enable Включен ли этот уровень smallint 0 или 1
activate Значение активации integer От 0 до 2500000. При достижении этого значения джекпот из пассивного состояния переходит в активное. В пассивном состоянии джекпот не может быть выигран. Когда джекпот в активном состоянии, у каждого игрока есть шанс выиграть джекпот при условии, что ставка игрока удовлетворяет условиям розыгрыша джекпота
init Основное значение integer От 0 до 2500000. Основное значение джекпота, по умолчанию 0. Если значение больше нуля, после выпадения каждого джекпота, значение следующего джекпота будет стартовать с этой величины. ВАЖНО: списывается с баланса зала
max Максимальное значение integer От 0 до 2500000. Если максимальное значение 0, оно игнорируется и джекпот выдается по таймеру. Если больше, чем значение активации, джекпот выдается по макс значению. Чем ближе накопление к нему, тем выше вероятность выпадения джекпота.
minbet Минимальная ставка integer От 0 до 2500 000 00 При игре на меньшие ставки игрок выиграть джекпот не может. ВАЖНО: указывается в центах

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
hall_id integer ID зала
operation string Код операции: get_balance, reset, change, get_settings или set_settings
time bigint Метка времени в формате UNIX timestamp
settings array Список текущих настроек джекпота.
history array История выпадений джекпота за период

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
hall_not_exist Зал не существует
wrong_settings_array Неверный массив настроек (операция set_settings)
wrong_jackpot_percent Неверный процент джекпота (операция set_settings)
wrong_activate_value Неверное значение активации (операция set_settings)
wrong_init_value Неверное основное значение (операция set_settings)
activation_LEVEL_value_not_set Не установлено значение активации уровня LEVEL(bronze,silver,gold,diamond) при включении этого уровня (операция set_settings)
init_value_should_not_be_more_than_half_of_activation_value Основное значение джекпот больше половины значения активации (операция set_settings)
next_level_jackpot_should_double_previous Следующий уровень джекпота должен быть вдвое больше предыдущего. Ошибка также будет, если включать уровни не последовательно. Если вы хотите включить какой-то уровень, предыдущий должен быть тоже включен (операция set_settings)
jackpot_interval_wrong Неверный интервал выпадения джекпот (операция set_settings)
timer_wrong Неверное значение таймера джекпота(операция set_settings)
nothing_to_update Нет значений для обновления (операция set_settings)
time_periods_are_empty Ошибка только для операции get_history, если поля period_start или period_end не указаны
invalid_date_format Неверный формат даты в полях period_start, или period_end.
time_period_more_that_thirty_days Период выборки больше 30 дней.
Пример запроса на изменение джекпота:
 <request>
    <version>0.6</version>
    <settings>
       <enable>1</enable>
       <outtext>STAR JACKPOT</outtext>
       <timer>1800</timer>
       <jackpotpercent>2</jackpotpercent>
       <tunejackpot>1</tunejackpot>
       <interval_enabled>1</interval_enabled>
       <interval_start>100</interval_start>
       <interval_end>400</interval_end>
       <bronze>
          <enable>1</enable>
          <minbet>300</minbet>
          <init>30</init>
          <max>3000</max>
          <activate>300</activate>
       </bronze>
       <silver>
          <enable>1</enable>
          <minbet>300</minbet>
          <init>60</init>
          <max>3000</max>
          <activate>600</activate>
       </silver>
       <gold>
          <enable>1</enable>
          <minbet>300</minbet>
          <init>90</init>
          <max>3000</max>
          <activate>1200</activate>
       </gold>
       <diamond>
          <enable>1</enable>
          <minbet>900</minbet>
          <init>90</init>
          <max>9000</max>
          <activate>2400</activate>
       </diamond>
    </settings>
    <operation>set_settings</operation>
    <user_id>77777</user_id>
    <hall_id>77</hall_id>
    <show_packet>1</show_packet>
 </request>

Этот запрос соответствует таким настройкам в админ панели



Получение списка залов агента

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_get_hallslist

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
agent_id integer Да ID агента
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде Base64 строки по следующей схеме: BASE64(ПАРОЛЬ_АГЕНТА). В языке PHP для данной операции используется функция base64_encode:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_hallslist методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
agent_id integer ID агента
halls_count integer Количество залов
halls array Массив залов
time bigint Метка времени в формате UNIX timestamp

Имеющиеся залы приходят в виде массива. Пример массива:

<?php
'hall' => (
		'id' => 1,
		'name' =>
		'hall1',
		'balance' => 10400,
		'operator_name' => 'oper1'
	);
?>

где где id - ID зала, name - имя зала, balance – баланс зала, operator_name – имя оператора.

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
agent_not_exist Агент с заданным ID и паролем не существует
invalid_agent_id Неверный формат ID агента или не задан параметр

Изменение баланса зала агентом

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_hall_operation_balance

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
agent_id integer Да ID агента
hall_id integer Да ID зала
operation string Да Тип операции: increase - пополнить баланс, descrese - списать средства с баланса
sum integer Да Сумма
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде Base64 строки по следующей схеме: BASE64(ПАРОЛЬ_АГЕНТА). В языке PHP для данной операции используется функция base64_encode:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_hall_operation_balance методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
hall_id integer ID зала
code string Код ошибки
old_balance integer Старый баланс зала в копейках
new_balance integer Новый баланс зала в копейках
time bigint Метка времени в формате UNIX timestamp

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
agent_not_exist Агент с заданным ID и паролем не существует
agent_is_not_owner Агент не является владельцем зала
wrong_operation Неверно задана операция
hall_too_low_balance Недостаточный баланс у зала (операция decrease)
agent_too_low_balance Недостаточный баланс у агента (операция increase)

Получение списка операций агента

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_get_agent_story

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
agent_id integer Да ID агента
period_start bigint Да Метка времени unix, начало периода запроса
period_end bigint Да Метка времени unix, окончание периода запроса
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Примечание: разница между началом и окончанием периода не может быть более трёх дней.

Также необходимо сформировать цифровую подпись в виде Base64 строки по следующей схеме: BASE64(ПАРОЛЬ_АГЕНТА). В языке PHP для данной операции используется функция base64_encode:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_get_agent_story методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
agent_id integer ID агента
code string Код ошибки
period_start bigint Метка времени unix, начало периода запроса
period_end bigint Метка времени unix, окончание периода запроса
operations_count integer Количество операций
operations array Массив операций
time bigint Метка времени в формате UNIX timestamp

История операций приходит в виде массива. Пример массива:

<?php
'operation' => array('id' => 1,
                     'description' => 'hall 360, + 1000',
                     'date' => time(),
                     'balance_before' => 104000,
                     'sum' => 100000
                     'balance_after' => 40000,
                     'by' => 'someagent');
?>

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
agent_not_exist Агент с заданным ID и паролем не существует
wrong_period_data Неверно задан период запроса
too_big_period Задан слишком большой период

Получение списка игровых логов

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/remotecab_game_history

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.4 или 0.5
user_id integer Да ID пользователя
user_password string Да Пароль пользователя
use_hash integer Да Если этот параметр равен 1, то в поле user_password должен находится не пароль, а его md5 хеш. Если он равен 0, то используется plain пароль.
operation string Да Тип операции. List - получение списка логов за период. Log - получение деталей 1 лога
log_id /game_id bigint /int Да ИД игрового лога или ИД игры (одно из двух) для операции log . При указании game_id, последний лог по игре будет возврашен
period_start datetime Да Начала периода выборки. Формат ГГГГ-ММ-ДД ЧЧ:ММ:СС. Только для операции list
period_end datetime Да Окончание периода выборка. Формат ГГГГ-ММ-ДД ЧЧ:ММ:СС. Только для операции list
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Примечание: разница между началом и окончанием периода не может быть более трёх дней.

Также необходимо сформировать цифровую подпись в виде md5(user_password + XML_запрос (строка) + user_password), где user_password - пароль пользователя

Известные ограничения: Максимальный интервал выборки логов — 24 часа. Максимальная дальность выборки — 7 дней. На нашем сервере не хранятся логи старше 7 дней. Мы рекомендуем выбирать логи каждый час, и записывать их в Вашу базу данных — это снизит нагрузку на сервер, и увеличит скорость работы Вашей системы. При просмотре информации об игровом логе, отдельной строкой мы отдаем уже сформированный html-код (упакованный base64), так как разбор информации о логе происходит на нашей стороне. Картинки из лога имеют ссылки на наш сервер.

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

1. Для операции list – получение списка логов:
Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
user_id integer ID пользователя
user_hash integer Определяет, как создавалась подпись пакета — md5(user_password), или user_password. См. параметр use_hash выше.
code string Код ошибки
hall_id integer Номер зала пользователя
logs_count integer Количество записей
operation bigint Выбранная операция
timestamp bigint Метка времени в формате UNIX timestamp
md5 string Подпись пакета

Содержимое массива игрового лога

Поле Тип Описание
dataid bigint ИД игрового лога
gameid integer Индекс игры
date datetime Дата и время лога, формат — ГГГГ-ММ-ДД ЧЧ:ММ:СС
bet bigint Поле BET (ставка)
win bigint Поле WIN (выгрыш)
lines bigint Поле LINES
balance bigint Баланс игрока
gname string Имя игры

Для операции log – получение информации об отдельном логе

Поле Тип Описание
status string Статус операции — success, если все успешно; failure – при ошибке.
code string Код ошибки. Поля не существует при статусе success
user_id integer ИД пользователя
use_hash integer Определяет, как создавалась подпись пакета — md5(user_password), или user_password. См. параметр use_hash выше.
hallid integer Номер зала пользователя
timestamp bigint Метка времени в формате unix timestamp
operation string Выбранная операция
log_id bigint Id игрового лога
log_date datetime Дата и время лога, формат — ГГГГ-ММ-ДД ЧЧ:ММ:СС
log_bet bigint Поле BET (ставка)
log_win bigint Поле WIN (выгрыш)
log_betline bigint Поле BetLine
log_lines bigint Поле LINES
log_balance bigint Баланс игрока
log_gname string stringИмя игры
log_html string HTML с расшифровкой лога, и картинками игры. Строка упакована base64.
md5 string Подпись пакета. Формируется как md5Encrypt (user_password + timestamp + user_id + user_password)

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_sended Неверно сформированный документ XML
wrong_api_version Неверная версия апи (поддержив. 0.5 или 0.4)
required_fields_are_empty Заполнены не все поля в XML пакете
no_path_to_send_packet Параметр show_packet равен 0, и не указан response_url
wrong_userid ИД пользователя указан неверно
user_not_isset Пользователь с указанным ИД не существует
wrong_user_pass Пароль пользователя указан неверно.
time_periods_are_empty Ошибка выдается при установке пункта operation = list, и при пустом поле period_start, или period_end
invalid_date_format Неверный формат даты в полях period_start, или period_end.
time_period_more_that_one_day Период выборки более чем 24 часа. (60*60*24)
game_id_is_wrong, log_id_is_wrong Ошибка выдается при установке пункта operation = log, и при неправильном формате поля log_id или game_id
either_game_id_or_log_id_must_be_supplied Ошибка выдается при установке пункта operation = log, при пустом поле log_id и game_id (хотя бы 1 параметр должен быть)
invalid_operation_name Неверно заполнено поле operation. Допустимые значения — list и log.
log_is_not_isset Лог с указанным ИД, и принадлежащий пользователю с указанным ИД, не найден.

Пример запроса и ответа для получения деталей по логу:
Запрос
 <request>
 <version>0.4</version> 
 <operation>log</operation> 
 <user_id>12044</user_id> 
 <user_password>1DF12b3</user_password> 
 <use_hash>0</use_hash> 
 <log_id>5951155076</log_id> 
 <response_url></response_url> 
 <show_packet>1</show_packet> 
 </request>
 

Ответ
 <request>
 <version>0.4</version> 
 <status>success</status> 
 <timestamp>1470312323</timestamp> 
 <user_id>12044</user_id> 
 <use_hash>0</use_hash> 
 <hall_id>255</hall_id> 
 <operation>log</operation> 
 <log_id>5951155076</log_id> 
 <log_date>2016-07-31 12:26:02</log_date> 
 <log_bet>500</log_bet> 
 <log_win>1000</log_win> 
 <log_betline>0</log_betline> 
 <log_lines>0</log_lines> 
 <log_balance>3327000</log_balance> 
 <log_gname>Deuces Wild</log_gname>
 <log_html>PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CgoJICAgICAgICAgICAgICAgIDx0cj48dGQgYmdjb2xvcj0iNDQwMDAwIj4KCgkgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSIgIGJvcmRlcj0iMCI+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgYmdjb2xvcj0iIzhGMDAwMCI+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiA+R2FtZSBpbmZvcm1hdGlvbjogRGV1Y2VzIFdpbGQgPGJyIC8+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMDE2LTA3LTMxIDEyOjI2OjAyKTwvdGQ+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZCBhbGlnbj0iY2VudGVyIj48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dHI+PHRkPkJFVDo8L3RkPjx0ZD41LjAwPC90ZD48L3RyPjx0cj48dGQ+V0lOOjwvdGQ+PHRkPjEwLjAwPC90ZD48L3RyPjx0cj48dGQ+QkFMQU5DRTo8L3RkPjx0ZD4zMzI3MC4wMDwvdGQ+PC90cj48L3RyPjwvdGFibGU+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImNlbnRlciI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dHI+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzEwLmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvOS5qcGciIHdpZHRoPSI5MCIgaGlnaHQ9IjEwMCIvPjwvdGQ+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzguanBnIiB3aWR0aD0iOTAiIGhpZ2h0PSIxMDAiLz48L3RkPjx0ZD48aW1nIHNyYz0iaHR0cHM6Ly9hcGlzZXJ2ZXIuc29sdXRpb25zL2ltZy9iYXJhYmFuL2NhcmRzL2JpZy8yNS5qcGciIHdpZHRoPSI5MCIgaGlnaHQ9IjEwMCIvPjwvdGQ+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzM5LmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZCBhbGlnbj0iY2VudGVyIj48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvMTAuanBnIiB3aWR0aD0iOTAiIGhpZ2h0PSIxMDAiLz48L3RkPjx0ZD48aW1nIHNyYz0iaHR0cHM6Ly9hcGlzZXJ2ZXIuc29sdXRpb25zL2ltZy9iYXJhYmFuL2NhcmRzL2JpZy85LmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvOC5qcGciIHdpZHRoPSI5MCIgaGlnaHQ9IjEwMCIvPjwvdGQ+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzI1LmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvMzkuanBnIiB3aWR0aD0iOTAiIGhpZ2h0PSIxMDAiLz48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPgoKCQk8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlIj48dHI+CgoJCTx0ZCBzdHlsZT0id2lkdGg6NTAlOyB0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iJmx0OyZsdDsiIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0naHR0cHM6Ly9hcGlzZXJ2ZXIuc29sdXRpb25zL3JlbW90ZWNhYj9hY3Q9bG9nJmxvZ19pZD01OTUxMTUwMjM0JyIgLz48L3RkPgoKCQk8dGQgc3R5bGU9IndpZHRoOjUwJTsgdGV4dC1hbGlnbjpyaWdodDsiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSImZ3Q7Jmd0OyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSdodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvcmVtb3RlY2FiP2FjdD1sb2cmbG9nX2lkPTU5NTExNDk5NzAnIiAvPjwvdGQ+CgoJCTwvdHI+PC90YWJsZT4=</log_html> 
 <md5>9986a56907868571b3f15ec5579f0748</md5> 
 </request>

Редактирование терминала

Операция осуществляется отправкой XML-запроса методом POST на адрес https://apiserver.solutions/api_change_user

Необходимые поля в XML-запросе:

Поле Тип Обязательный Описание
version float Да Версия API. Значение должно быть 0.6
hall_id integer Да ID зала
user_id integer Да ID игрока
data array Да Массив значений, которые нужно изменить
show_packet smallint Да, если не задан response_url Если значение параметра равно 1, результат XML-запроса будет отдан запрашивающему скрипту. В противном случае результат будет отдан по адресу, переданному в параметре response_url
response_url string Да, если параметр show_packet равен 0 Адрес, на который будет отправлен результат XML-запроса, если параметр show_packet равен 0. Отправка производится методом POST.

Также необходимо сформировать цифровую подпись в виде MD5-хэша операции по следующей схеме: MD5(СЕКРЕТНОЕ_СЛОВО_ЗАЛА + XML-запрос (строка) + СЕКРЕТНОЕ_СЛОВО_ЗАЛА). В языке PHP для данной операции используется функция md5:

После формирования структуры XML-запроса его необходимо закодировать с помощью метода base64 (функция base64_encode в языке РНР) и отправить полученную строку вместе с цифровой подписью по адресу https://apiserver.solutions/api_change_user методом POST. Строка закодированного запроса помещается в параметр reg_xml, цифровая подпись помещается в параметр reg_sign.

Доступные значения массива data: (минимум 1 значение ).

Поле Тип Описание
email string новый email пользователя
phone integer новый телефон пользователя
active smallint новый статус пользователя. 1 - активен, 2 - заблокирован
password string пароль пользователя
birthDay,
birthMonth,
birthYear
integer Новая дата рождения пользователя

Требования к формату полей такие же, как при регистрации терминала

В случае успешного запроса в ответ придёт XML-пакет, закодированный в формат base64 и подпись пакета. В пакете содержатся следующие поля:

Поле Тип Описание
version float Версия API
status string Статус операции. В случае успеха - success; при ошибке - failure.
code string Код ошибки
user_id integer ID игрока
hall_id integer ID зала
data array массив новых значений профиля игрока
time bigint Метка времени в формате UNIX timestamp

В случае ошибки поле code в пакете будет содержать код ошибки:

Код ошибки Описание
request_not_exists Необходимых полей (reg_xml) не найдено в POST запросе
invalid_xml_format Неверно сформирован XML-документ запроса
required_fields_are_empty Заполнены не все обязательные поля в XML-запросе
wrong_signature Неверная подпись XML-запроса
wrong_api_version Версия API указана неверно
hall_not_exist Зал с заданным ID не существует
wrong_userid Неверный формат ID игрока или не задан параметр
user_not_isset Пользователь с такими параметрами не существует
data_array_not_set Массив изменений data не задан
nothing_to_change Не задано хотя бы 1 значение для изменения в массиве data
wrong_email Неверный формат email
wrong_birthdate_params Неверный формат даты рождения
phone_format_invalid Неверный формат телефона
user_phone_already_exist Телефон уже зарегистрирован в системе
user_email_already_exist Email уже зарегистрирован в системе
password_is_wrong Неверный формат пароля
status_is_wrong Неверный формат статуса игрока




Защита информации


Защита информации является важной задачей современного бизнеса. Любая утечка Ваших важных данных может стать серьёзной проблемой.

Компания Stargame заботится о безопасности своих клиентов и предлагает решение, не имеющее аналогов. Наша система безопасности проста в установке и надежна. Она зашифрует и сделает невидимой всю ценную информацию на Ваших компьютерах.

Описание API игрового сервера

Невозможность обнаружения скрытой информации.

Шифрование Ваших данных выполняется программой TrueCrypt, которая более чем за 10 лет зарекомендовала себя, как надежное средство шифрования и сокрытия ценной информации на компьютерах.

Зашифрованная информация выглядит как беспорядочный набор байт и её содержимое не может быть никак идентифицировано.

Если Ваше оборудование будет утеряно или похищено, обнаружить скрытую информацию или программное обеспечение на нём, а также получить доступ к Вашим логинам и паролям, невозможно никакими современными средствами анализа в криптографических лабораториях.

Это подтверждено независимым аудитом системы TrueCrypt в 2014-м году, который заключил, что программа не имеет проблем с безопасностью или намеренных ослаблений шифрования для доступа разработчиков или спецслужб к зашифрованной информации.

Завладеть паролем невозможно.

Все пароли от Ваших зашифрованных данных создаются и надежно хранятся на нашем сервере. Пароли не хранятся на Ваших компьютерах, никому из посторонних людей они не известны.

Централизованное управление.

На одном из компьютеров устанавливается операторская программа для управления всеми Вашими компьютерами, объединенными в одну сеть. С операторского компьютера можно запустить программное обеспечение или завершить его работу на любом из компьютеров или на всех компьютерах сразу.

Наша система снабжена тревожной кнопкой.

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

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

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

Простота установки.

Наша система защиты устанавливается в течение нескольких минут. Мы можем сообщить все необходимые инструкции для установки. Если у Вас возникнут проблемы, свяжитесь с нами - наши специалисты подключатся к Вам удаленно и сделают всё за вас.




Варианты интеграции

Примеры реализации

Введение

Интеграция игр в Вашу систему происходит по следующей схеме. При регистрации игрока на Вашем сайте необходимо также зарегистрировать его в нашей системе с помощью соответствующих методов API. При авторизации игрока в Вашей системе необходимо создать ему сессию на игровом сервере. Делается это с помощью удалённого управление сессиями пользователей. Полученные данные сессии необходимо передать в игровой клиент.

Для ознакомительного просмотра игр возможен демонстрационный режим, который не требует авторизации пользователя.

Демонстрационный режим

Чтобы дать игроку ознакомиться с различными вариантами игр, их можно запустить в демострационном режиме. Для этого в качестве параметров сессии нужно передать следующие значения: SID = 777, KEY1 = 777, KEY2 = 777.

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

Реализация витрины игр

Для реализации витрины игр необходимо получить список игр с игрового сервера. Сделать это можно разными способами. В нашем примере, написанном на языке PHP, мы рассмотрим вариант запроса списка всех игр в формате JSON.

Пример:

<?php
	//Получаем с удалённого игрового сервера список
	$games_json = file_get_contents("https://apiserver.solutions/remote_games_list?format=json");

	//Преобразуем полученный JSON в стандартный массив языка РНР
	$games = json_decode($games_json, true);
?>

Сгенерируем витрину игр, которая позволит игроку выбрать то, во что он хочет поиграть.

<?php
//Обходим категории игр в полученном массиве
foreach ($games["gamelist"] as $family)
{
	//Для удобства корректируем переменную
	$family = $family["family"];

	//Обходим список игр внутри категории
	foreach($family["games"] as $game)
	{
		//Генерируем HTML-код элемента для отображения данной игры
		$result .= "<div class="game" familyid="".$family["id"]."" gameid="".$game["id"]."" gamename="".$game["name"]."" gameurl="".$game["url"]."" isaristocrat="".$game["isaristocrat"]."" style="background-image: url(".$game["icon"].");"></div>";
	}
}

//Выводим результат
echo $result;
?>

Для отображения витрины игр создадим шаблон HTML-страницы, которую мы будем использовать. Для удобства нам потребуются также библиотеки jQuery и SWFObject.

<!DOCTYPE html>
<html>
	<head>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
		<!-- В этом месте мы разместим JavaScript код, с помощью которого будем обрабатывать действия игрока на странице -->
		<script type="text/javascript">

		</script>
		<!-- Здесь разместим CSS стили страницы -->
		<style type="text/css" media="screen">
		</style>
	</head>
	<body>
		<div id="main">
			<!-- В этот блок будет выводиться витрина игр -->
		</div>
		<div id="overlay"></div>
		<div id="game_container">
		<div id="game_flash"></div>
		</div>
	</body>
</html>

Для корректного отображения элементов страницы нам потребуется вот такой набор CSS-стилей.

body, html	{
	margin: 0;
	padding: 0;
	background: #000000;
}
a, img	{
	border: 0;
}
a:active, a:focus, img, div	{
	outline: 0;
}
#main	{
	position: absolute;
	width: 100%;
	height: 100%;
	text-align: center;
	z-index: 1;
}
.game {
	position: relative;
	display: inline-block;
	margin: 5px;
	width: 218px;
	height: 64px;
	background: #000000 0 0 no-repeat;
	cursor: pointer;
}
#overlay	{
	position: fixed;
	width: 100%;
	height: 100%;
	background: rgba(0, 0, 0, 0.85);
	z-index: 1000;
	display: none;
}
#game_container {
	position: absolute;
	width: 800px;
	height: 600px;
	left: 50%;
	margin-left: -400px;
	top: 50%;
	margin-top: -300px;
	z-index: 1001;
	display: none;
}

Вывод игр на страницу

На данный момент поддерживаются 2 способа вывода игр –

  1. c использованием технологии postMessage (HTML5)
  2. с использованием быстрой интеграции на основе JavaScript (рекомендуется)
  3. c использованием Flash-загрузчика

Вариант с использованием HTML5

Закрытие popup-окна с игрой через кнопку Cashout происходит через postMessage при получении сообщения ― Close от нашего сервера. Пример реализации ниже (с использованием jQuery plugin Facebox в качестве попап окна. Если вы используете обычное popup-окно, измените $.facebox.close(); на window.close(); или на любой другой обработчик в зависимости от библиотеки):

<script type="text/javascript">
  window.addEventListener("DOMContentLoaded", function() {
  window.addEventListener("message", function(msg){
     if(msg.data && msg.data.name == "Close" ) {
       $.facebox.close();
     }
  })
  }, false);
</script>

Пример запуска игры по id:

<script type="text/javascript">
    function doStartGame(gameid, login, pass ) {
        var commandline = 'https://apiserver.solutions/tote_opbetting3?gameid=' + gameid + '&
                          ulogin='+ login + '&upass=' +pass+'&x=' + Math.random() +
                          "jsoncallback=?";

        if (login=='none')
            window.location.href = "/login";

        var html = '<iframesrc="' + commandline + '" width="450"
                     height="340" align="left">Ваш браузер неподдерживает плавающие фреймы!
                   </iframe>';

        $.facebox(html);
        return false;
    }
</script>

Для выделенного красным см. примечание в конце.

Вывод списка игр c учетом авторизации:

<div class="games">
  <?php
    $i = 1;
    foreach($games as $game):
  ?>
  <div class="images-overview <?php echo ($i % 4 == 0 ? 'last' : ''); ?>">
     <span><?php echo $game['name']; ?></span>
     <img src="<?php echo $game['icon']; ?>" alt="
            <?php echo $game['id']; ?>" title="<?php echo $game['id']; ?>">
     <a href="#" title="<?php echo $game['name']; ?>"
            onclick="return doStartGame( <?php echo $game['gid']; ?>,
            <?php echo $login; ?>,<?php echo $pass; ?>;">
     <span class="text-link">играть</span></a>
     <div class="details">
        <p><?php echo $game['name']; ?></p>
     </div>
  </div>
  <?php $i++;
     endforeach;
  ?>
</div>

где $login – логин пользователя в системе , $pass - md5 от пароля пользователя в системе

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

В примере запуска игры по id, если нет логина, $login='none', в функцию вызова флеш игры ( пункт 5.1) добавляем перенаправление на страницу логина вашего сайта (выделено красным в примере):

<script type="text/javascript">
function doStartGame(gameid, login, pass){
   var commandline = 'https://apiserver.solutions/tote_opbetting3?gameid=' + gameid + '&
                     ulogin=' + login + '&upass=' +pass+'&x=' + Math.random() + "
                     jsoncallback=?";

   if (login=='none')
      window.location.href = "/login";

   var html = '<iframe src="' + commandline + '" width="800"
                        height="600" align="left">
                        Ваш браузер не поддерживает плавающие фреймы!</iframe>';

   $.facebox(html);
   return false;
}
</script>

Быстрая интеграция (рекомендуется)

Быстрая интеграция позволяет разместить игры на Вашем сайте без необходимости тратить время на реализацию API. От Вас требуется лишь добавить несколько строк программного кода на Вашу страницу.

Для запуска игры на своем сайте Вам необходима регистрация в нашей системе как агента, иметь активный зал и пользователей, прикрепленных к залу. Для регистрации в нашей системе свяжитесь с нашим менеджером. Информацию по связи Вы можете найти в разделе "Контакты".

Для быстрой интеграции игры на странице необходимо разместить специальный код. В структуре страницы данный код может размещаться в любом месте, но желательно поместить его внутри тега <head></head>. Нижеследующий пример кода отображает все возможные параметры кода, которые доступны для использования. В качестве примера взяты следующие тестовые данные: игрок с логином 1334, номер игрового зала 1890, секретное слово зала secret, игра с id 219.

<script type="text/javascript" charset="utf-8">
var starconfig = {
	login: 1334,
	hash: "1a250ab682fd877c2117c87addf312e4",
	gameid: 219,
	width: 1024,
	height: 788,
	balanceChange: "changeMyBalance",
	closeWindow: "closeMyWindow",
	logo:  'My Company',
	logoword: 'CompanyName',
    betsoft : 0,
    hideGameControls: 1
};
</script>
<script type="text/javascript" src="http://stargame.solutions/embed/embed.js" charset="utf-8"></script>

Параметры, которые необходимо передать в коде:

Название параметра Обязательный Описание
login Да Логин (id игрового терминала)
hash Да md5-хэш от конкатенации строк (номер зала + секретное слово + id пользователя)
gameid Да id игры
width Нет Ширина игрового окна
height Нет Высота игрового окна
balanceChange Нет Имя javascript-функции, которая вызывается игрой на Вашей странице при изменении баланса игрока
closeWindow Нет Имя javascript-функции, которая вызывается игрой на Вашей странице при закрытии вкладки в браузере
logo Нет Текст копирайта в правом нижнем углу игрового окна (отображается при загрузке игры). Максимум 20 символов, допустимы пробелы и цифры
logoword Нет Текст копирайта при загрузке игры. Ограничение: только латинские символы, максимум 9 символов, без пробелов.
betsoft Нет Если параметр установлен в 1, будет показан логотип Betsoft на старте игры.
hideGameControls Нет Если параметр установлен в 1, будут спрятаны кнопки управления в игре

Оптимальный размер игрового окна 1024x788 для игр типа aricstocrats и 800x600 для всех остальных игр. При задании размеров окна, отличающихся от оптимальных, следует сохранять оригинальное соотношение высоты и ширины. Размеры окна можно узнать используя список игр API. Ширина и высота игрового окна также могут быть заданы в процентах.

Вариант с использованием Flash-загрузчика

Для реализации на своем сайте, используйте прямую ссылку https://apiserver.solutions/public/tote/GameLoader.swf.

Пример js скрипта для запуска игры:

   <script type="text/javascript">
       function doStartGameAll(gameid, login, pass) {
         if(login == 'none')
           window.location.href = "/login";

         var commandline = "";
         $.ajax({
           url: " /frame?gameid=" + gameid,
           type: "GET",
           success: function(results){
              commandline = results;
           },
           complete: function(){
              $.facebox(commandline);
           },
           error: function(xhr,err){

           }
         });
       }
   </script>

Пример выше открывает facebox окно со страницей, содержащей Flash-загрузчик. Этой странице вы должны передать 4 параметра - sid, key1, key2, config.

Параметры сессии пользователя для демо сайтов: sid – 777, key1 – 777, key2 – 777, config - https://apiserver.solutions/flashconfig.php

Пример страницы для Flash-загрузчика:

  <?php
    <script type="text/javascript">
    function thisMovie(movieName) {
       if (navigator.appName.indexOf("Microsoft") != -1){
          return window[movieName];
       } else {
          return document[movieName];
       }
    }

    function callFlashMethod() {
       document.getElementById('flashapp').externalClose();
    }

    function closePopup(){
       callFlashMethod();
       $.facebox.close();
       return false;
    }


    </script>


<div>
  <object id="_MainApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        width="<? echo $width;?>" height="<? echo $height;?>"
        wmode="direct" allowscriptaccess="always">
    <param name="movie" value="https://apiserver.solutions/public/tote/GameLoader.swf" />
    <param name="allowfullscreen" value="true" />
    <param name="wmode" value="direct" />
    <param name="allowscriptaccess" value="always" />
    <param name="flashvars" value="SID=<? echo $sid;?>&KEY1=
        <? echo $key1;?>&KEY2=<? echo $key2;?>&gameid=<? echo $gid;?>&
        config=<? echo $config;?>" />
      <!-- [if !IE]> -->
      <object type="application/x-shockwave-flash" id="flashapp" wmode="direct"
            allowscriptaccess="always" allowfullscreen="true"
            data="https://apiserver.solutions/public/tote/GameLoader.swf"
            width="<? echo $width;?>" height= "<? echo $height;?>"
            flashvars="SID=<? echo $sid;?>&KEY1=<? echo $key1;?>&KEY2=<? echo $key2;?>
            &gameid=<? echo $gid;?>&config=<? echo $config;?>" >
         <param name="wmode" value="direct" />
		   <param name="allowscriptaccess" value="always" />
		    <param name="allowfullscreen" value="true" />
    <param name="flashvars" value="SID=<? echo $sid;?>&KEY1=
        <? echo $key1;?>&KEY2=<? echo $key2;?>&gameid=<? echo $gid;?>&
        config=<? echo $config;?>" />
      <!-- <![endif] -->
         <div>
           <h3>_MainApp</h3>
         </div>
      <!-- [if !IE]> -->
        </object>
      <!-- <![endif] -->
  </object>
</div>
?>

JavaScript функция closePopup() нужна для закрытия игрового окна Flash-приложением со стороны сайта. Если она отсутствует, кнопка закрытия игры не будет отображаться . closePopup дополнительно вызывает функцию callFlashMethod(), которая в свою очередь вызывает обработчик Flash-игры externalClose();.

Обработчик externalClose() нужен для корректного сохранения баланса на сайте в процессе игры (в случае ,если игрок закрыл игровое окно в процессе игры ). Переменная $gamename содержит название загрузчика, переменные $width и $height ширину и высоту окна для показа игры. В случае с обычными играми размер окна равен 800х600px, если игра относится к типу аристократы — 1024x768px

Примечания

Примечание 1:

* Для изменения баланса в режиме реального времени, добавьте в реализацию js функцию gameBalanceChange(amount). Также к событию выхода из Flash-игры добавьте обращение к методу externalClose() Flash-приложения. Flash-игра будет передавать обновл`нный баланс в функцию gameBalanceChange при каждом его изменении. По выходу из флеш игры, функция externalClose() гарантирует целостность данных (на случай, если барабаны еще не остановились во Flash-приложении, а пользователь вышел из игры).

Пример функции gameBalanceChange:

<script type="text/javascript">
  functiongameBalanceChange(amount) {
     var am = amount;
     $('#balance').html(am);
     $.ajax({
        type: "POST",
        url: "/ru-RU/usercab?changebalance=1",
        data: {amount: am},
        success: function(data) {
        }
     });
  }
</script>