andrey-tech / bizon365-api-php
Обертка на PHP7+ для работы с API v1 сервиса Бизон 365 c троттлингом запросов и логированием в файл
Installs: 115
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 2
Open Issues: 0
pkg:composer/andrey-tech/bizon365-api-php
Requires
- php: >=7.0
- ext-json: *
- andrey-tech/debug-logger-php: ^2.0
- andrey-tech/http-client-php: ^3.0
This package is auto-updated.
Last update: 2025-10-08 02:51:03 UTC
README
Обертка на PHP7+ для работы с REST API v1 сервиса Бизон 365 c троттлингом запросов к API и логированием в файл.
Содержание
Требования
- PHP >= 7.0;
- класс HTTP>= 3.0 - НТТР(S) клиент с троттлингом запросов, поддержкой маркера BOM в теле сообщения формата JSON и выводом отладочной информации о запросах и ответах в STDOUT;
- класс DebugLogger>= 2.0 - логгер, сохраняющий отладочную информацию в файл вместе с данными об объеме используемой оперативной памяти и прошедшем времени;
- произвольный автозагрузчик классов, реализующий стандарт PSR-4.
Установка
Установка через composer:
$ composer require andrey-tech/bizon365-api-php:"^2.2"
или добавить
"andrey-tech/bizon365-api-php": "^2.2"
в секцию require файла composer.json.
Класс Bizon365API
Для работы с REST API v1 сервиса Бизон 365 используется класс \App\Bizon365\Bizon365API.
При возникновении ошибок выбрасывается исключение класса \App\Bizon365\Bizon365APIException.
В настоящее время в классе реализованы:
- методы работы со страницами регистрации и подписчиками вебинаров;
- методы для получения отчетов по проведенным вебинарам и автовебинарам.
Поддерживается оба способа авторизации в сервисе Бизон 365:
- предварительная авторизация с получением cookie;
- авторизация через токен пользователя.
Общие методы класса
- __construct(string $authToken = null)
 Конструктор класса.- $authToken- токен авторизации (для авторизации посредством токена пользователя).
 
- auth(string $username, string $password) :array
 Выполняет предварительную авторизация с получением cookie и возвращает ответ от API.- $username- имя пользователя;
- $password- пароль пользователя.
 
- logout() :array
 Выполняет выход из системы и возвращает ответ от API.
- setLogger($logger)Устанавливает объект класса, выполняющего логирование отладочной информации в файл.- объект класса, реализующего интерфейс \App\DebugLogger\DebugLoggerInterface.
 
- объект класса, реализующего интерфейс 
Дополнительные параметры
Дополнительные параметры настройки доступны через публичные свойства класса \App\Bizon365\Bizon365API:
| Нестатическое свойство | По умолчанию | Описание | 
|---|---|---|
| $logger | null | Хранит объект класса \App\DebugLogger\DebugLogger, выполняющего логирование запросов и ответов к API в файл. Если null, то логирование не выполняется. | 
| $http | \App\HTTP\HTTP | Хранит объект класса \App\HTTP\HTTP, отправляющего запросы к API | 
Методы для получения отчетов по вебинарам
Методы для получения отчетов по проведенным вебинарам и автовебинарам находятся в трейте \App\Bizon365\WebinarViewers:
- getWebinarList(int $skip = 0, int $limit = 100, bool $liveWebinars = true, bool $autoWebinars = true) :array
 Возвращает список доступных отчетов по вебинарам.- $skip- пропустить указанное число записей;
- $limit- ограничить количество записей (не более 100);
- $liveWebinars- искать среди живых вебинаров;
- $autoWebinars- искать среди автовебинаров.
 
- getAllWebinarList(int $skip = 0, int $limit = 100, bool $liveWebinars = true, bool $autoWebinars = true) :array
 Возвращает список всех доступных отчетов по вебинарам.- $skip- пропустить указанное число записей;
- $limit- количество записей в одном ответе от API (не более 100);
- $liveWebinars- искать среди живых вебинаров;
- $autoWebinars- искать среди автовебинаров.
 
- getWebinarViewers(string $webinarId, int $skip = 0, int $limit = 1000) :array
 Возвращает список зрителей вебинара.- $webinarId- ID вебинара;
- $skip- пропустить указанное число записей;
- $limit- ограничить количество записей (не более 1000);
 
- getAllWebinarViewers(string $webinarId, int $skip = 0, int $limit = 1000) :array
 Возвращает список всех зрителей вебинара.- $webinarId- ID вебинара;
- $skip- пропустить указанное число записей;
- $limit- количество записей в одном ответе от API (не более 100);
 
Примеры
use App\Bizon365\{Bizon365API, Bizon365APIException}; try { $bizon365 = new Bizon365API(); // Выполняем предварительную авторизацию $bizon365->auth('ivan@example.com', 'klfi89309gkds'); // Получаем список из 100 доступных отчетов по вебинарам $webinars = $bizon365->getWebinarList($skip = 0, $limit = 100); print_r($webinars); // Получаем список всех доступных отчетов по вебинарам $webinars = $bizon365->getAllWebinarList(); print_r($webinars); // Получаем список из 100 зрителей первого вебинара $webinarId = $webinars[0]['webinarId']; $viewers = $bizon365->getWebinarViewers($webinarId, $skip = 0, $limit = 100); print_r($viewers); // Получаем список всех зрителей первого вебинара $viewers = $bizon365->getAllWebinarViewers($webinarId); print_r($viewers); // Выполняем выход $bizon365->logout(); } catch (Bizon365APIException $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); } catch (Exception $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); }
Методы для работы с подписчиками
Методы для работы со страницами регистрации и подписчиками находятся в трейте \App\Bizon365\WebinarSubsribers:
- getWebinarSubpages(int $skip = 0, int $limit = 50) :array
 Возвращает список страниц регистрации и их рассылок.- $skip- пропустить указанное число записей;
- $limit- ограничить количество записей (не более 50).
 
- getAllWebinarSubpages(int $skip = 0, int $limit = 50) :array
 Возвращает список всех страниц регистрации и их рассылок.- $skip- пропустить указанное число записей;
- $limit- количество записей в одном ответе от API (не более 50).
 
- getWebinarSubscribers(string $pageId, int $skip = 0, int $limit = 1000, string $webinarTimeMin = null, string $webinarTimeMax = null, string $registeredTimeMin = null, string $registeredTimeMax = null, string $url_marker = null) :array
 Возвращает список подписчиков для заданной страницы регистрации.- $pageId- ID страницы регистрации;
- $skip- пропустить указанное число записей;
- $limit- ограничить количество записей (не более 1000);
- $webinarTimeMin- нижняя граница для времени сеанса, на который зарегистрированы подписчики, в формате ISO8601;
- $webinarTimeMax- верхняя граница для времени сеанса, на который зарегистрированы подписчики, в формате ISO8601;
- $registeredTimeMin- нижняя граница для времени регистрации подписчика в формате ISO8601;
- $registeredTimeMax- верхняя граница для времени регистрации подписчика в формате ISO8601;
- $url_marker- значение маркера из URL, идентификатор партнера.
 
- getAllWebinarSubscribers(string $pageId, int $skip = 0, int $limit = 1000, string $webinarTimeMin = null, string $webinarTimeMax = null, string $registeredTimeMin = null, string $registeredTimeMax = null, string $url_marker = null) :array
 Возвращает список всех подписчиков для заданной страницы регистрации.- $pageId- ID страницы регистрации;
- $skip- пропустить указанное число записей;
- $limit- количество записей в одном ответе от API (не более 1000);
- $webinarTimeMin- нижняя граница для времени сеанса, на который зарегистрированы подписчики, в формате ISO8601;
- $webinarTimeMax- верхняя граница для времени сеанса, на который зарегистрированы подписчики, в формате ISO8601;
- $registeredTimeMin- нижняя граница для времени регистрации подписчика в формате ISO8601;
- $registeredTimeMax- верхняя граница для времени регистрации подписчика в формате ISO8601;
- $url_marker- значение маркера из URL, идентификатор партнера.
 
Примеры
use App\Bizon365\{Bizon365API, Bizon365APIException}; try { // Авторизация через токен пользователя $token = 'exampleIBJ4P30oN38H2W4nr1Va4ry4PnH7s4p38S5Xv6B7EoI'; $bizon365 = new Bizon365API($token); // Получаем список из 100 страниц регистрации и их рассылок $subpages = $bizon365->getWebinarSubpages($skip = 0, $limit = 100); print_r($subpages); // Получаем список комнат $response = $this->http->getResponse(false); print_r($response['rooms']); // Получаем список всех страниц регистрации и их рассылок $subpages = $bizon365->getAllWebinarSubpages(); print_r($subpages); // Получаем список всех подписчиков вебинаров на заданной странице регистрации за 31 июля 2020 г. $pageId = '123456:as'; $webinarTimeMin = '2020-07-31T00:00:00+03:00'; $webinarTimeMax = '2020-07-31T23:59:59+03:00'; $subscribers = $bizon365->getAllWebinarSubscribers($pageId, 0, 1000, $webinarTimeMin, $webinarTimeMax); // Выполняем выход $bizon365->logout(); } catch (Bizon365APIException $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); } catch (Exception $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); }
Вспомогательные классы
Класс HTTP
Класс \App\HTTP\НТТР обеспечивает:
- формирование POST запросов к API Бизон 365 по протоколу HTTPS;
- настраиваемый троттлинг запросов к API (по умолчанию отключен);
- вывод отладочной информации о запросах к API в STDOUT.
При возникновении ошибок выбрасывается исключение с объектом класса \App\HTTP\HTTPException.
Примеры
use App\Bizon365\{Bizon365API, Bizon365APIException}; use App\HTTP\HTTP; try { $bizon365 = new Bizon365API(); // Устанавливаем максимальный уровень вывода отладочных сообщений в STDOUT $bizon365->http->debugLevel = HTTP::DEBUG_URL | HTTP::DEBUG_HEADERS | HTTP::DEBUG_CONTENT; // Устанавливаем троттлинг запросов на уровне не более 1 запрос в секунду $bizon365->http->throttle = 1; // Устанавливаем таймаут обмена данными в 30 секунд $bizon365->http->curlTimeout = 30; // Выполняем авторизацию $bizon365->auth('ivan@example.com', 'klfi89309gkds'); } catch (Bizon365APIException $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); } catch (Exception $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); }
Примеры отладочных сообщений:
[1] ===> POST https://online.bizon365.ru/api/v1/auth/login
POST /api/v1/auth/login HTTP/1.1
Host: online.bizon365.ru
User-Agent: HTTP-client/2.x.x
Accept: */*
Content-type: application/x-www-form-urlencoded
Content-Length: 47
username=ivan@example.como&password=klfi89309gkds
[1] <=== RESPONSE 0.6192s (200)
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 15 Jun 2020 12:08:03 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 125
Connection: keep-alive
X-DNS-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, X-Token
Access-Control-Allow-Method: HEAD OPTIONS GET POST PUT UPDATE PATCH
Access-Control-Max-Age: 86400
Access-Control-Allow-Credentials: true
ETag: W/"7d-8pw4R/X+sbjhsu6o6SkgY7bXiYo"
set-cookie: appsid=s%3AmQiE5vQbA-8WS4KCyPS9MHmgKIB1GHA-.XAESPMGN%2FUa4zYLca7UsbIVFjMYjOjw4hjE5N%2Fj2ZBU; Path=/; Expires=Mon, 15 Jun 2020 13:07:48 GMT; HttpOnly
{"message":"Успешная авторизация. Куки отправлены вместе с этим ответом."}
Класс DebugLogger
Класс \App\DebugLogger\DebugLogger обеспечивает логирование запросов и ответов к API Бизон 365 в файл.
При возникновении ошибок выбрасывается исключение класса \App\DebugLogger\DebugLoggerException.
Методы класса
- static instance(string $logFileName = 'debug.log') :self
 Возвращает единственный объект данного класса для заданного лог-файла- $logFileName.- $logFileName- имя лог-файла.
 
- save(mixed $info, object $object = null, string $header = null) :voidСохраняет подлежащую логированию информацию в файл.- $info- строка, массив или объект для логирования;
- $object- ссылка на объект класса в котором выполняется логирование;
- $header- строка заголовка для сохраняемой в лог файл информации.
 
Дополнительные параметры
Дополнительные параметры устанавливаются через публичные свойства класса \App\DebugLogger\DebugLogger:
| Нестатическое свойство | По умолчанию | Описание | 
|---|---|---|
| $isActive | false | Включает или выключает логирование для конкретного файла, задаваемого параметром $logFileNameметодаinstance() | 
| Статическое свойство | По умолчанию | Описание | 
|---|---|---|
| $logFileDir | temp/ | Устанавливает каталог, в котором сохраняются лог-файлы | 
| mkdirMode | 0755 | Устанавливает режим доступа для создаваемых каталогов для хранения лог файлов в виде восьмеричного числа | 
| $uniqIdLength | 7 | Длина уникального буквенно-цифрового [a-z0-9]+ идентификатора объекта класса DebugLoggerдля сохранения в лог файле,  позволяющего находить записи, созданные одним и тем же процессом | 
Примеры
use App\Bizon365\{Bizon365API, Bizon365APIException}; use App\DebugLogger\DebugLogger; try { $bizon365 = new Bizon365API(); // Устанавливаем каталог для сохранения лог файлов DebugLogger::$logFileDir = 'logs/'; // Создаем объект класса логгера $logFileName = 'debug_bizon365api.log'; $logger = DebugLogger::instance($logFileName); // Включаем логирование $logger->isActive = true; // Устанавливаем логгер $bizon365->setLogger($logger); // Выполняем авторизацию $bizon365->auth('ivan@example.com', 'klfi89309gkds'); } catch (Bizon365APIException $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); } catch (Exception $e) { printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); }
Пример результатов логирования:
*** oun0lym [2020-06-15 12:08:06.732048 +00:00 Δ- s, 0.53/2.00 MiB] ********************
* Class: App\Bizon365\Bizon365API
ЗАПРОС: POST https://online.bizon365.ru/api/v1/auth/login
{
    "username": "ivan@example.com",
    "password": "klfi89309gkds"
}
*** oun0lym [2020-06-15 12:08:07.364074 +00:00 Δ0.632026 s, 0.53/2.00 MiB] ********************
* Class: App\Bizon365\Bizon365API
ОТВЕТ: POST https://online.bizon365.ru/api/v1/auth/login
{
    "message": "Успешная авторизация. Куки отправлены вместе с этим ответом."
}
Формат заголовков лога
*** oun0lym [2020-06-15 12:08:07.364074 +00:00 Δ0.632026 s, 0.53/2.00 MiB] ********************
* Class: App\Bizon365\Bizon365API
- oun0lym- уникальный буквенно-цифровой [a-z0-9]+ идентификатор объекта класса- DebugLogger, позволяющий находить в лог файле записи, созданные одним и тем же процессом;
- 2020-06-15 12:08:07.364074 +00:00- дата и время сохранения информации с точностью до микросекунд;
- Δ0.632026 s- время, прошедшее с момента предыдущего сохранения информации в секундах и микросекундах;
- 0.53/2.00 MiB- данные об используемой оперативной памяти в единицах количества информации с двоичными приставками:- 0.53- максимальный объем памяти, который был выделен PHP-скрипту системой;
- 2.00- реальный объем памяти, выделенный PHP-скрипту системой;
 
- Class: App\Bizon365\Bizon365API- полное имя класса из которого выполнено сохранение в лог файл.
Автор
© 2019-2021 andrey-tech
Лицензия
Данный код распространяется на условиях лицензии MIT.
