andrey-tech/bizon365-api-php

PHP7+ 的包装,用于与 Bizon 365 API v1 服务交互,具有请求节流和文件日志记录功能

2.2.0 2021-02-07 16:32 UTC

This package is auto-updated.

Last update: 2024-09-08 00:14:38 UTC


README

Bizon365 logo
Latest Stable Version Total Downloads License

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 许可协议进行分发。