API для .NET | API для PHP



Написанное ниже относится к версиям MikroBILL 2.0.6 и более новым.
Для создания расширений на PHP вам понадобится подключить файл apicore.php
(найти его можно в папке WEB документов апача в подпапке kassa).
Полное описание классов доступно здесь.
Версия класса для Python здесь.



1. Пример подключения к серверу MikroBILL.


//Импортируем библиотеку API
include 'apicore.php';

//Создаём новый экземпляр класса MikroBILL_API
$Api = new MikroBILL_API('IP_или_host', Port, 'Login', 'Password');

//Выполняем запрос API
$Api->Process('Команда API');

//Закрываем соединение
$Api->Close();




Вы можете скопировать файл apicore.php на другой WEB-сервер, где нет кассы MikroBILL, тогда при создании экземпляра класса MikroBILL_API необходимо добавить ещё 2 аргумента:



//Создаём новый экземпляр класса MikroBILL_API
$Api = new MikroBILL_API('IP_или_host', Port, 'Login', 'Password', $CRYPTO_KEY_1, $CRYPTO_KEY_2);



Переменную $CRYPTO_KEY_1 вы можете взять из файла config.php, который расположен в корне WEB сервера MikroBILL, а переменную $CRYPTO_KEY_2 из БД MikroBILL из таблицы `workparams`.
Обратите внимание, что значения этих переменных являются уникальными и при переустановке MikroBILL будут изменены!





2. Формат команд.

Команды вызываются по их пути. Разделителем пути является символ точки. Путь соответсвует классам в их иерархии, описание классов доступно здесь.
Как видим, команда получения или поиска абонентов находится непосредственно в классе API, значит вызов будет выглядеть так:


$Api->Process('API.GetClients');


Результатом будет JSON вида:


{"return":[...], "code":0}


В поле return массив ID абонентов. Поле code = 0 показывает отсутствие ошибок. Любое другое число сигнализирует о проблеме, тогда в return будет описание.
Чтобы обратиться к свойству абонента, в пути команды необходимо указать ID абонета:


// Получаем имя абонента
$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Name");


Результат:


{"return":"UserName", "code":0}


Ещё пример. Установим новый IP абоненту. Для этого нужно вначале получить все аккаунты абонента:


$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Accounts");


Результатом будет массив GUID аккаунтов:


{"return":[...], "code":0}


Теперь обратимся к нужному аккаунту, чтобы получить свойство "IP".


$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Accounts.$AccountGUID.IP");


Ответ:


{"return":"IP_клиента", "code":0}


Для установки значения необходимо добавить второй аргумент в функцию Process:


$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Accounts.$AccountGUID.IP", "192.168.10.25");


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


// Добавляем аккаунт абоненту
$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Accounts.AddAccount",["120.10.53.234","","Login","Password"]);


Если операция прошла успешно, вы получит сообщение вида:


{"return":"OK", "code":0}




3. Пакетные команды.

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


// Создаём массив и перечисляем аргументы.
$arr = array((string)$AccountGUID => array('IP', 'MAC');

// Выполняем команду
$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Accounts", $arr);

// В данном случае будут вызваны 2 пути:
// API.Client.$ClientGUID.AutorizeInfo.Accounts.$AccountGUID.IP
// API.Client.$ClientGUID.AutorizeInfo.Accounts.$AccountGUID.MAC


Результатом будет JSON вида:


[{"return":"1.1.1.1", "code":0, "path":"API.Client.633824158637492.AutorizeInfo.Accounts.28236356495083.IP"},
{"return":"AA:AA:AA:AA:AA:AA", "code":0, "path":"API.Client.633824158637492.AutorizeInfo.Accounts.28236356495083.MAC"}]


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


// Создаём массив и перечисляем аргументы.
$arr = array((string)$AccountGUID => array('IP' => '192.168.25.110', 'MAC' => 'aa:bb:cc:dd:ee:ff'));

// Выполняем команду
$Api->Process("API.Client.$ClientGUID.AutorizeInfo.Accounts", $arr);



Результатом будет JSON вида:


[{"return":"OK", "code":0, "path":"API.Client.633824158637492.AutorizeInfo.Accounts.28236356495083.IP"},
{"return":"OK", "code":0, "path":"API.Client.633824158637492.AutorizeInfo.Accounts.28236356495083.MAC"}]


Так же имеется возможность в одной команде читать параметры и устанавливать.


// Создаём массив и перечисляем аргументы.
$arr = array((string)"$ClientGUID.BillingInfo.Money", (string)"$ClientGUID2.AutorizeInfo.Accounts.$AccountGUID2" => array('MAC' => 'aa:bb:cc:dd:ee:ff'));

// Выполняем команду
$Api->Process("API.Client", $arr);



Результатом будет JSON вида:


[{"return":"100.01", "code":0, "path":"API.Client.633824158637492.BillingInfo.Money"},
{"return":"OK", "code":0, "path":"API.Client.9527563927532953.AutorizeInfo.Accounts.835354904534456.MAC"}]



Вы можете использовать массивы с любой глубиной вложенности.
Например, здесь:


// Создаём массив и перечисляем аргументы.
$arr=array('IP' => '192.168.25.110');

// Выполняем команду
$Api->Process("API.Client.633824158637492.AutorizeInfo.Accounts.28236356495083", $arr);



И здесь:


// Создаём массив и перечисляем аргументы.
$arr = array('AutorizeInfo' => array('Accounts' => array('28236356495083' => array('IP' => '192.168.25.110'))));

// Выполняем команду
$Api->Process("API.Client.633824158637492", $arr);



В обоих случаях вызывается путь:
API.Client.633824158637492.AutorizeInfo.Accounts.28236356495083.IP