andrey-tech/bizon365-api-php
PHP7+ 的包装,用于与 Bizon 365 API v1 服务交互,具有请求节流和文件日志记录功能
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: 2024-09-08 00:14:38 UTC
README
PHP7+ 的包装,用于与 REST API v1 服务 Bizon 365 交互,具有请求节流和文件日志记录功能。
内容
要求
- PHP >= 7.0;
- 类
HTTP
>= 3.0 - 支持请求节流、支持 JSON 格式消息体中的 BOM 标记和将请求和响应的调试信息输出到 STDOUT 的 HTTP(S) 客户端; - 类
DebugLogger
>= 2.0 - 将调试信息保存到文件,并记录使用的内存量和经过的时间; - 遵循 PSR-4 标准的任意自动加载器。
安装
通过 composer 安装
$ composer require andrey-tech/bizon365-api-php:"^2.2"
或者
"andrey-tech/bizon365-api-php": "^2.2"
在 composer.json 文件的 require 部分添加
类 Bizon365API
用于与 Bizon 365 REST API v1 服务交互的是类 \App\Bizon365\Bizon365API
。
发生错误时,将抛出类 \App\Bizon365\Bizon365APIException
的异常。
目前类中实现了
支持 Bizon 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
的公共属性提供了额外的配置参数。
用于获取网络研讨会报告的方法
用于获取已举行网络研讨会和自动网络研讨会报告的方法位于 \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
返回所有 webinar 观众的列表。$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\НТТР
提供
- 按照HTTPS协议向Bizon 365 API发送POST请求;
- 可配置的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
提供将Bizon 365 API的请求和响应记录到文件的日志功能。
出现错误时,抛出类 \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
的公共属性设置其他参数。
示例
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]+ 类别标识符,允许在日志文件中查找由同一进程创建的记录;2020-06-15 12:08:07.364074 +00:00
- 保存信息的日期和时间,精确到微秒;Δ0.632026 s
- 从上次保存信息以来经过的时间,以秒和微秒为单位;0.53/2.00 MiB
- 关于使用的操作内存的数据,以信息单位表示,使用二进制前缀;0.53
- 系统分配给PHP脚本的内存最大值;2.00
- 系统实际分配给PHP脚本的内存值。
类: App\Bizon365\Bizon365API
- 从中保存到日志文件的类的完整名称。
作者
© 2019-2021 andrey-tech
许可证
本代码按照 MIT 许可协议进行分发。