PHP code example of reutskiy-a / simple-api-bitrix24

1. Go to this page and download the library: Download reutskiy-a/simple-api-bitrix24 library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

reutskiy-a / simple-api-bitrix24 example snippets


use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\Connectors\Models\Webhook;
use SimpleApiBitrix24\Enums\AuthType;

$apiSettings = new ApiClientSettings(AuthType::WEBHOOK);
$apiSettings->setDefaultCredentials(new Webhook('https://test.bitrix24.ru/rest/1/b1hw1*****k12t/'));

$api = new ApiClientBitrix24($apiSettings);

print_r($api->call('crm.deal.get', ['ID' => 2]));

use PDO;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\TableManager;

// Создаём объект PDO.
$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');

// Создаём объект описывающий схему будущей таблицы.
// Если нужно указать свои названия колонок и самой таблицы, то задайте их через ApiDatabaseConfig::__construct();
$databaseConfig = ApiDatabaseConfig::build($pdo);

// Создаём таблицу в базе, если она там отсутствует.
$tableManager = new TableManager($databaseConfig);
$tableManager->createUsersTableIfNotExists();   // или $tableManager->createUsersTableIfNotExists('your_table_name')

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\UserRepository;
use SimpleApiBitrix24\Enums\AuthType;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // или задайте свою схему таблицы через ApiDatabaseConfig::__construct()

// Создаём объект пользователя, авторизацию которого будем использовать.
$repository = new UserRepository($databaseConfig);
$user = $repository->getUserByIdAndMemberId(1, 'bitrix24_member_id');

// создаём объект настроек REST API клиента и зададим в этом примере авторизацию по умолчанию.
// так же авторизацию можно установить или изменить методом ApiClientBitrix24::setCredentials
$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$apiSettings->setDefaultCredentials($user);

// создаём объект REST API клиента
$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

print_r($api->call('crm.deal.get', ['ID' => 2]));

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\UserRepository;
use SimpleApiBitrix24\Enums\AuthType;
use SimpleApiBitrix24\Services\Installation\InstallationService;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // или задайте свою схему таблицы через ApiDatabaseConfig::__construct()

$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

// сохраняем данные пользователя в базу
$user = InstallationService::createUserFromProfileAndSave(
    $databaseConfig,
    'local.693c2b5c42e7c3.81926786',
    'fDlCI34BZbbWv31iNm7H1jpwmu5py9vMyMkkVzQ3IC3WQdPQC4',
    $_REQUEST['member_id'],
    $_REQUEST['AUTH_ID'],
    $_REQUEST['REFRESH_ID'],
    $_REQUEST['DOMAIN']
);

// Тут ваша логика установки приложения
$api->setCredentials($user); // устанавливаем авторизацию для REST API клиента
print_r($api->call('scope'));

// Вызываем метод завершения установки приложения
InstallationService::finishInstallation();

use SimpleApiBitrix24\ApiClientSettings;

$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$apiSettings->setDefaultCredentials($user);

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\UserRepository;
use SimpleApiBitrix24\Enums\AuthType;
use SimpleApiBitrix24\Services\Installation\InstallationService;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // или задайте свою схему таблицы через ApiDatabaseConfig::__construct()
$apiSettings = new ApiClientSettings(AuthType::TOKEN);

// Пользователь №1
$repository = new UserRepository($databaseConfig);
$user_1 = $repository->getUserByIdAndMemberId(1, 'bitrix24_member_id_1');

$apiClient_1 = new ApiClientBitrix24($apiSettings, $databaseConfig);
$apiClient_1->setCredentials($user_1);

// Пользователь №2
$user_2 = $repository->getFirstAdminByMemberId('bitrix24_member_id_2');

$apiClient_2 = clone $apiClient_1;
$apiClient_2->setCredentials($user_2);

// далее можем работать с разными независимыми друг от друга объектами REST API клиента
print_r($apiClient_1->call('profile'));
print_r($apiClient_2->call('profile'));

use SimpleApiBitrix24\Services\Installation\InstallationService;

// метод добавляет или обновляет данные пользователя в базе
InstallationService::createUserFromProfileAndSave(
    $databaseConfig,
    'local.693c2b5c42e7c3.81926786',
    'fDlCI34BZbbWv31iNm7H1jpwmu5py9vMyMkkVzQ3IC3WQdPQC4',
    $_REQUEST['member_id'],
    $_REQUEST['AUTH_ID'],
    $_REQUEST['REFRESH_ID'],
    $_REQUEST['DOMAIN']
);

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\DatabaseCore\UserRepository;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // или задайте свою схему таблицы через ApiDatabaseConfig::__construct()

// Все методы и описание смотрите в реализации репозитория
$repository = new UserRepository($databaseConfig);

$user = $repository->getFirstUserByMemberId('member_id');
$user = $repository->getFirstAdminByMemberId('member_id');

$users = $repository->getAllUsersByMemberId('member_id');

$repository->delete($user);

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\Enums\AuthType;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // или задайте свою схему таблицы через ApiDatabaseConfig::__construct()

// по умолчанию обработка лимитов всегда включена при создании объекта ApiClientSettings;
// вы можете отключить или задать свой интервал для повторного запроса в микросекундах
$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$apiSettings
    ->setOperationTimeLimitHandler(true, 5000000)
    ->setQueryLimitExceededHandler(true, 1000000);

$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;
use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\Enums\AuthType;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // или задайте свою схему таблицы через ApiDatabaseConfig::__construct()
$apiSettings = new ApiClientSettings(AuthType::TOKEN);

$logger = new Logger('api-b24');
$handler = new RotatingFileHandler(
    storage_path('logs/rest-api-bitrix24.log'),
    15,
    Logger::DEBUG
);
$formatter = new LineFormatter(
    "[%datetime%] %level_name%: %message% %context%\n",
    'Y-m-d H:i:s',
    true
);
$formatter->setJsonPrettyPrint(true);
$handler->setFormatter($formatter);
$logger->pushHandler($handler);

$api = new ApiClientBitrix24($apiSettings, $databaseConfig, $logger);

use SimpleApiBitrix24\ApiClientBitrix24;

//...

$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

$result = $api->callBatch([
    ['method' => 'scope', 'params' => []],
    ['method' => 'crm.deal.list', 'params' => ['select' => ['ID', 'TITLE']]],
]);

print_r($result);

use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\Services\Batch;

// ...

$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

$batchService = new Batch($api);

// получаем все элементы сущности, работает только со списочными методами
$getAllResult = $batchService->getAll('tasks.task.list', ['filter' => ['STATUS' => 5]]);

// вернёт ответы предварительно отсортировав их по тем же ключам массива, которые вы укажете в аргументе метода.
$resultWithKeys = $batchService->callWithKeys([
    'scope_response' => ['method' => 'scope', 'params' => []],
    'deal_list_response' => ['method' => 'crm.deal.list', 'params' => ['select' => ['ID', 'TITLE']]],
])

// BatchCollector — инструмент для накопления нескольких REST‑запросов в одном объекте
// с последующим пакетным выполнением, что уменьшает количество обращений к API.
// Можно добавлять более 50 запросов — сервис сам корректно разобьёт их на батчи.
$batchCollector = $batchService->collector();
$batchCollector->add('crm.deal.update', ['id' => 123, 'fields' => ['...']]);
$batchCollector->add('crm.deal.update', ['id' => 124, 'fields' => ['...']]);
$batchCollector->add('crm.lead.update', ['id' => 123, 'fields' => ['...']]);
$collectorResult = $batchCollector->execute();

use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\Connectors\Models\Webhook;
use SimpleApiBitrix24\Enums\AuthType;

$apiSettings = new ApiClientSettings(AuthType::WEBHOOK);
$apiSettings->setDefaultCredentials(new Webhook('https://test.bitrix24.ru/rest/1/b1hw1*****k12t/'));

$api = new ApiClientBitrix24($apiSettings);

print_r($api->call('crm.deal.get', ['ID' => 2]));

use PDO;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\TableManager;

// Create a PDO instance
$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');

// Create a database configuration object.
// If you need custom table or column names, pass them via ApiDatabaseConfig::__construct()
$databaseConfig = ApiDatabaseConfig::build($pdo);

// Create the users table if it does not exist
$tableManager = new TableManager($databaseConfig);
$tableManager->createUsersTableIfNotExists();   // or $tableManager->createUsersTableIfNotExists('your_table_name')

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\UserRepository;
use SimpleApiBitrix24\Enums\AuthType;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);

// Load a user whose authorization tokens will be used
$repository = new UserRepository($databaseConfig);
$user = $repository->getUserByIdAndMemberId(1, 'bitrix24_member_id');

// Create settings and set default credentials
$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$apiSettings->setDefaultCredentials($user);

// Create the REST API client
$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

print_r($api->call('crm.deal.get', ['ID' => 2]));

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\UserRepository;
use SimpleApiBitrix24\Enums\AuthType;
use SimpleApiBitrix24\Services\Installation\InstallationService;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);

$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

// Create and save the user in the database
$user = InstallationService::createUserFromProfileAndSave(
    $databaseConfig,
    'local.693c2b5c42e7c3.81926786',
    'fDlCI34BZbbWv31iNm7H1jpwmu5py9vMyMkkVzQ3IC3WQdPQC4',
    $_REQUEST['member_id'],
    $_REQUEST['AUTH_ID'],
    $_REQUEST['REFRESH_ID'],
    $_REQUEST['DOMAIN']
);

// Your installation logic here
$api->setCredentials($user);
print_r($api->call('scope'));

// Finalize installation
InstallationService::finishInstallation();

use SimpleApiBitrix24\ApiClientSettings;

$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$apiSettings->setDefaultCredentials($user);

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\DatabaseCore\UserRepository;
use SimpleApiBitrix24\Enums\AuthType;
use SimpleApiBitrix24\Services\Installation\InstallationService;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // If you need custom table or column names, pass them via ApiDatabaseConfig::__construct()
$apiSettings = new ApiClientSettings(AuthType::TOKEN);

// User #1
$repository = new UserRepository($databaseConfig);
$user_1 = $repository->getUserByIdAndMemberId(1, 'bitrix24_member_id_1');

$apiClient_1 = new ApiClientBitrix24($apiSettings, $databaseConfig);
$apiClient_1->setCredentials($user_1);

// User #2
$user_2 = $repository->getFirstAdminByMemberId('bitrix24_member_id_2');

$apiClient_2 = clone $apiClient_1;
$apiClient_2->setCredentials($user_2);

// Now both clients work independently
print_r($apiClient_1->call('profile'));
print_r($apiClient_2->call('profile'));

use SimpleApiBitrix24\Services\Installation\InstallationService;

InstallationService::createUserFromProfileAndSave(
    $databaseConfig,
    'local.693c2b5c42e7c3.81926786',
    'fDlCI34BZbbWv31iNm7H1jpwmu5py9vMyMkkVzQ3IC3WQdPQC4',
    $_REQUEST['member_id'],
    $_REQUEST['AUTH_ID'],
    $_REQUEST['REFRESH_ID'],
    $_REQUEST['DOMAIN']
);

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\DatabaseCore\UserRepository;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // If you need custom table or column names, pass them via ApiDatabaseConfig::__construct()

// All methods and description can be found in the repository implementation
$repository = new UserRepository($databaseConfig);

$user = $repository->getFirstUserByMemberId('member_id');
$user = $repository->getFirstAdminByMemberId('member_id');

$users = $repository->getAllUsersByMemberId('member_id');

$repository->delete($user);

use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\Enums\AuthType;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);

// by default, limit processing is always enabled when creating an ApiClientSettings object;
// you can disable it or set your own interval for re-request in microseconds
$apiSettings = new ApiClientSettings(AuthType::TOKEN);
$apiSettings
    ->setOperationTimeLimitHandler(true, 5000000)
    ->setQueryLimitExceededHandler(true, 1000000);

$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;
use PDO;
use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\ApiClientSettings;
use SimpleApiBitrix24\ApiDatabaseConfig;
use SimpleApiBitrix24\Enums\AuthType;

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'password');
$databaseConfig = ApiDatabaseConfig::build($pdo);   // If you need custom table or column names, pass them via ApiDatabaseConfig::__construct()
$apiSettings = new ApiClientSettings(AuthType::TOKEN);

$logger = new Logger('api-b24');
$handler = new RotatingFileHandler(
    storage_path('logs/rest-api-bitrix24.log'),
    15,
    Logger::DEBUG
);
$formatter = new LineFormatter(
    "[%datetime%] %level_name%: %message% %context%\n",
    'Y-m-d H:i:s',
    true
);
$formatter->setJsonPrettyPrint(true);
$handler->setFormatter($formatter);
$logger->pushHandler($handler);

$api = new ApiClientBitrix24($apiSettings, $databaseConfig, $logger);

use SimpleApiBitrix24\ApiClientBitrix24;

//...

$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

$result = $api->callBatch([
    ['method' => 'scope', 'params' => []],
    ['method' => 'crm.deal.list', 'params' => ['select' => ['ID', 'TITLE']]],
]);

print_r($result);

use SimpleApiBitrix24\ApiClientBitrix24;
use SimpleApiBitrix24\Services\Batch;

// ...

$api = new ApiClientBitrix24($apiSettings, $databaseConfig);

$batchService = new Batch($api);

// Retrieve all items of an entity (works only with list‑type methods)
$getAllResult = $batchService->getAll('tasks.task.list', ['filter' => ['STATUS' => 5]]);

// Returns responses sorted by the same keys you provide
$resultWithKeys = $batchService->callWithKeys([
    'scope_response' => ['method' => 'scope', 'params' => []],
    'deal_list_response' => ['method' => 'crm.deal.list', 'params' => ['select' => ['ID', 'TITLE']]],
])

// BatchCollector is a utility for collecting multiple REST requests into a single queue
// and executing them as a batch, reducing the number of API calls.
// It supports more than 50 queued requests — batching is handled automatically.
$batchCollector = $batchService->collector();
$batchCollector->add('crm.deal.update', ['id' => 123, 'fields' => ['...']]);
$batchCollector->add('crm.deal.update', ['id' => 124, 'fields' => ['...']]);
$batchCollector->add('crm.lead.update', ['id' => 123, 'fields' => ['...']]);
$collectorResult = $batchCollector->execute();
json
{
  "error": "OPERATION_TIME_LIMIT",
  "error_description": "Method is blocked due to operation time limit."
}
json
{
  "error": "OPERATION_TIME_LIMIT",
  "error_description": "Method is blocked due to operation time limit."
}