bitrix24 rest api mesilov sdk batch get contacts example

bitrix24 rest api mesilov sdk batch get contacts example

Пример batch запроса для выборки полного списка контактов CRM. Если вам требуется собрать все контакты црм битрикс24, а их у вас больше 50, смело используйте метод batch. Пример представлен на основе sdk для битрикс24 от Месилова Максима. Ссылка на репозиторий: https://github.com/mesilov/bitrix24-php-sdk. Устанавливаем и подключаем sdk, заполняем данные приложения б24: id, secret, токены, домен. Далее выполняем батч запрос. Преимущество батч в том, что методом батч мы собираем все нужные запросы в пачку и отправляем их как один запрос. Давайте посчитаем, у нас 900 контактов, по простому мы бы выполнили 900/50 = 18 запросов, вместо этого батч выполнить один запрос вместо 18. В батч помечащется так же 50 запросов, то есть если контактов больше 2500, необходимо больше 1 батч запроса. Разница во времени выполнения таких запросов большая. Пользуйтесь на здоровье.

<?php
use \Bitrix24\CRM\Contact as B24Contact;
use \Bitrix24\Presets\CRM\Contact\Fields as B24ContactFields;

require_once __DIR__.'/vendor/autoload.php';

// init lib
$obB24App = new \Bitrix24\Bitrix24(false, $log);
// $obB24App->setApplicationScope(array("crm", "users"));
$obB24App->setApplicationId("appid");
$obB24App->setApplicationSecret("appsecret");
 
// set user-specific settings
$obB24App->setDomain($_REQUEST['domain']);
$obB24App->setMemberId($_REQUEST['memberid']);
$obB24App->setAccessToken($_REQUEST['auth']);
// $obB24App->setRefreshToken($arParams['REFRESH_ID']);

$arContacts = [];
$obB24App->addBatchCall('crm.contact.list', [
    'select' => ['ID', 'NAME', 'LAST_NAME'], 'order' => ['ID' => 'ASC'], 'filter' => ["ID" => $arContactsID]
], function ($result) use ($obB24App, &$arContacts) {
    // save first page
    foreach ($result['result'] as $contact) {
        $arContacts[$contact['ID']] = $contact;
    }
    // add calls for subsequent pages
    for ($i = $result['next']; $i < $result['total']; $i += $result['next']) {
        $obB24App->addBatchCall('crm.contact.list', [
            'start' => $i, 'select' => ['ID', 'NAME', 'LAST_NAME'], 'order' => ['ID' => 'ASC'], 'filter' => ["ID" => $arContactsID]
        ], function ($result) use (&$arContacts) {
            // save subsequent page
            foreach ($result['result'] as $contact) {
                $arContacts[$contact['ID']] = $contact;
            }
        });
    }
});
$obB24App->processBatchCalls();

print_r($arContacts);