A powerful PHP library for the Bitrix24 REST API
Bitrix24 API documentation - Russian
Bitrix24 API documentation - English
Register new Bitrix24 account
Bitrix24 auth features
work with auth tokenswork with incoming webhooks
add low-level tools to devs:
2.1 events (token expired, domain url changed)- 2.2 rate-limiter - wait for symfony/symfony#37471
- 2.3 RetryHttpClient - symfony/symfony#38182
API - level features
3.1 auto renew access tokens- 3.2 batch queries (work in progress)
3.2.1 read3.2.2 write- 3.2.3 read + write
- 3.2.4 read without count flag
- 3.3 list queries with «start=-1» support
- 3.4 offline queues
- 3.5 add change domain URL support
Core DTO
ResponseScopeTimeOAuthTokenApplicationProfilePagination
- http protocol
- json data
- symfony http client
- \Bitrix24\SDK\Core\ApiClient - work with b24 rest-api endpoints
input: arrays \ strings
output: Symfony\Contracts\HttpClient\ResponseInterface, operate with strings
process: network operations
- \Bitrix24\SDK\Services\Main - work with b24 rest-api entities
input: arrays \ strings (?) or queries?
output: b24 response dto
process: b24 entities, operate with
/Core
ApiClient.php - default api-client, work on http abstraction layer, return - Symfony\Contracts\HttpClient\ResponseInterface
/Services
/CRM
/Deals
/Client
Deals.php
/Exceptions
/Tasks
…
Main.php - default bitrix24 rest api service provide basic funcions, work with data transfer objects
- php: >=7.4
- ext-json: *
- ext-curl: *
Add "mesilov/bitrix24-php-sdk": "2.x"
to composer.json
of your application. Or clone repo to your project.
SDK test locate in folder tests
and we have two test types
- Unit: fast, in-memory tests without a network I\O
- Integration: slow tests with full lifecycle with test Bitrix24 portal via webhook
Bugs and feature request are tracked on GitHub
bitrix24-php-sdk is licensed under the MIT License - see the MIT-LICENSE.txt
file for details
Maxim Mesilov - mesilov.maxim@gmail.com - https://twitter.com/mesilov
See also the list of contributors which participated in this project.
email: mesilov.maxim@gmail.com
- хороший DX (Developer Experience)
- автодополнение методов на уровне IDE
- типизированные сигнатуры вызова методов
- типизированные результаты вызова методов – используются нативные типы: int, array, bool, string
- хелперы для типовых операций
- хорошая документация
- документация по работе конкретного метода содержащая ссылку на офф документацию
- документация по работе с SDK
- производительность:
- минимальное влияние на клиентский код
- возможность работать с большими объёмами данных с константным потреблением памяти
- эффективная работа c API с использованием батч-запросов
- современный стек технологий:
- библиотеки для работы с сетью и возможностью асинхронной работы
- фичи новых версий PHP
- надёжной:
- покрытие тестами: unit, интеграционные, контрактные
- есть типовые примеры характерные для разных режимов работы и они оптимизированы по памяти \ быстродействию
Зона ответственности:
- контракт на API-методы сущности
Входящие данные:
- сигнатура вызова конкретного API-метода
Возвращаемый результат:
Core\Response
(????) к обсуждению
В зависимости от метода может быть разный возвращаемый результат:
- результат выполнения операции типа bool
- идентификатор созданной сущности типа int
- сущность + пользовательские поля с префиксами UF_ типа array
- массив сущностей типа array
- пустой массив как результат пустого фильтра.
Если возвращать Core\Response
, то в клиентском коде будут проблемы:
- длинные цепочки в клиентском коде для получения возвращаемого результата
// добавили сделку в Б24
$dealId = $dealsService->add($newDeal)->getResponseData()->getResult()->getResultData()[0];
// получили массив сделок
$deals = $dealsService->list([], [], [], 0)->getResponseData()->getResult()->getResultData();
- отсутствие релевантной вызываемому методу типизации возвращаемого результата.
Ожидание:
add(array $newDeal):int // идентификатор новой сделки
list(array $order, array $filter, array $select, int $start):array //массив сделок + постраничка
get(int $dealId):array // конкретная сделка
Текущая реализация — возвращается унифицированный результат:
add(array $newDeal):Core\Response
list(array $order, array $filter, array $select, int $start):Core\Response
Зона ответственности:
- вызов произвольных API-методов
- обработка ошибок уровня API
- запрос нового токена и повторение запроса, если получили ошибку
expired_token
Входящие данные:
string $apiMethod
– название api-методаarray $parameters = []
– аргументы метода
Возвращаемый результат: Core\Response
– унифицированный объект-обёртка, содержит:
Symfony\Contracts\HttpClient\ResponseInterface
— объект ответа от сервера, может быть асинхроннымCore\Commands\Command
— информация о команде\аргументах которая была исполнена, используется при разборе пакетных запросов.
Для получения результата запроса к API используется метод Response::getResponseData
, который декодирует тело ответа вызвав
метод Symfony\Contracts\HttpClient::toArray
Возвращается стандартизированный DTO ResponseData
от API-сервера с полями:
Result
- DTO c результатом исполнения запроса;Time
— DTO c таймингом прохождения запроса через сервера Битрикс24;Pagination
— DTO постраничной навигации с полямиnext
иtotal
;
В случае обнаружения ошибок уровня домена будет выброшено соответствующее типизированное исключение.
Объект Result
содержит метод getResultData
, который возвращает массив с результатом исполнения API-запроса. В зависимости от вызванного
метода там может быть:
- результат выполнения операции типа bool
- идентификатор созданной сущности типа int
- сущность + пользовательские поля с префиксами UF_ типа array
- массив сущностей типа array
- пустой массив как результат пустого фильтра.
Зона ответственности:
- передача данных по сети
- соблюдение контракта на эндпоинты с которыми идёт работы
- «подпись» запросов токенами \ передача их в нужные входящие адреса если используется авторизация по вебхукам
Используется: Symfony HttpClient
Входящие данные:
- тип http-запроса
- массив с параметрами
Возвращаемые результаты:
— Symfony\Contracts\HttpClient\ResponseInterface
JSON по HTTP/2 или HTTP/1.1