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);