Інтеграція 1С-Бітрікс із сервісами перевірки контрагентів

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція 1С-Бітрікс із сервісами перевірки контрагентів
Середній
~1-2 тижні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    880
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    631
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    781
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    681
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1010

Інтеграція 1С-Бітрікс з сервісами перевірки контрагентів

B2B-магазин або корпоративний портал на Бітриксі отримує заявку від компанії — і менеджер витрачає 15 хвилин на ручну перевірку ІНН через сторонні сайти. Автоматична перевірка контрагента вбудовується в момент реєстрації організації, оформлення замовлення або створення угоди в CRM, і дані з Єдиного державного реєстру / реєстру дискваліфікованих осіб з'являються прямо в картці.

Джерела даних та API

Основні сервіси, з якими інтегрується Бітрикс:

Сервіс Що надає Тип запиту
ФНС ЕГРЮЛ (API) Статус компанії, адреса, керівник REST за ІНН/ОГРН
Контур.Фокус Реєстри банкрутства, арбітраж, фінансова звітність REST + OAuth
СПАРК Скоринг надійності, афіліованість REST + API-ключ
Dadata.ru Збагачення реквізитів за ІНН, автодовипадання REST, простий ключ
Прозорий бізнес (ФНС) Дискваліфіковані особи, податкові борги Публічний API

Dadata — найбільш поширений вибір для автодовипадання реквізитів при введенні: за ІНН повертає повне найменування, КПП, ОГРН, юридичну адресу, статус. Контур.Фокус або СПАРК підключають при необхідності глибокого фінансового аналізу.

Архітектура інтеграції

Інтеграція працює в двох режимах:

Режим 1 — онлайн-перевірка при введенні ІНН. Клієнт вводить ІНН у форму реєстрації або профілю організації. AJAX-запит йде на проміжний PHP-контролер, той запитує API Dadata, повертає реквізити на фронт. Користувач бачить автоматично заповнену форму.

Режим 2 — фонова перевірка існуючих контрагентів. Агент Бітрікса (CAgent) запускається вночі, перебирає компанії з b_highload_block_entity (HL-блок «Організації») або з таблиці користувачів, відправляє ІНН в API, зберігає результат.

Зберігання даних контрагентів

Для зберігання реквізитів організацій — HL-блок CompanyRequisites:

  • UF_INN — ІНН (рядок, унікальний індекс)
  • UF_OGRN — ОГРН
  • UF_KPP — КПП
  • UF_FULL_NAME — повне найменування
  • UF_ADDRESS_LEGAL — юридична адреса
  • UF_DIRECTOR — керівник
  • UF_STATUS — статус (active, liquidated, reorganizing)
  • UF_RISK_SCORE — скоринговий бал (якщо використовується СПАРК/Фокус)
  • UF_LAST_CHECK — дата останньої перевірки
  • UF_RAW_DATA — сирий JSON-ответ API

Привязка до користувача Бітрікса — поле UF_USER_ID на користувачі або зв'язок через властивість COMPANY_ID у профілі.

Запит до Dadata: реалізація

class DadataContragentChecker
{
    private string $apiKey;
    private string $secretKey;

    public function __construct(string $apiKey, string $secretKey)
    {
        $this->apiKey    = $apiKey;
        $this->secretKey = $secretKey;
    }

    public function getByInn(string $inn): ?array
    {
        $cacheKey = 'dadata_inn_' . md5($inn);
        $cache    = \Bitrix\Main\Data\Cache::createInstance();

        if ($cache->initCache(86400, $cacheKey, '/dadata/inn/')) {
            return $cache->getVars();
        }

        $response = (new \Bitrix\Main\Web\HttpClient())->post(
            'https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party',
            json_encode(['query' => $inn, 'count' => 1]),
            [
                'Content-Type'  => 'application/json',
                'Authorization' => 'Token ' . $this->apiKey,
                'X-Secret'      => $this->secretKey,
            ]
        );

        $data = json_decode($response, true);
        if (empty($data['suggestions'][0])) {
            return null;
        }

        $result = $this->normalizeResponse($data['suggestions'][0]);

        $cache->startDataCache(86400, $cacheKey, '/dadata/inn/');
        $cache->endDataCache($result);

        return $result;
    }

    private function normalizeResponse(array $suggestion): array
    {
        $data = $suggestion['data'];
        return [
            'full_name' => $data['name']['full_with_opf'] ?? '',
            'inn'       => $data['inn'] ?? '',
            'kpp'       => $data['kpp'] ?? '',
            'ogrn'      => $data['ogrn'] ?? '',
            'address'   => $suggestion['unrestricted_value'] ?? '',
            'director'  => $data['management']['name'] ?? '',
            'status'    => strtolower($data['state']['status'] ?? 'unknown'),
        ];
    }
}

Кешування на 24 години — обов'язково. Без нього при масовій перевірці швидко упираємось в ліміти API (Dadata: 10 000 запитів/добу на безплатному тарифі).

Вбудова у форму реєстрації

Компонент bitrix:system.auth.registration переоцінюється в шаблоні. До форми додається поле ІНН з JavaScript-автодовиванням:

document.getElementById('inn-field').addEventListener('blur', async function() {
    const inn = this.value.replace(/\D/g, '');
    if (inn.length !== 10 && inn.length !== 12) return;

    const resp = await fetch('/local/ajax/check-inn.php?inn=' + inn);
    const data = await resp.json();

    if (data.success) {
        document.getElementById('company-name').value  = data.full_name;
        document.getElementById('kpp-field').value     = data.kpp;
        document.getElementById('ogrn-field').value    = data.ogrn;
        document.getElementById('address-field').value = data.address;

        if (data.status !== 'active') {
            showWarning('Компанія не є діючою');
        }
    }
});

Поле /local/ajax/check-inn.php — тонкий контролер, який викликає DadataContragentChecker і повертає JSON.

Інтеграція з CRM Бітрікс24

Якщо використовується CRM, перевірка вбудовується в момент створення контакту або компанії через події:

  • OnAfterCrmContactAdd / OnAfterCrmCompanyAdd — запускає фонову перевірку через обробник
  • Результат пишеться в поле UF компанії CRM
  • При низькому скорингу або статусі «ліквідована» — автоматично створюється задача менеджеру на ручну перевірку
AddEventHandler('crm', 'OnAfterCrmCompanyAdd', function(&$fields) {
    $inn = $fields['fields']['UF_INN'] ?? '';
    if (!$inn) return;

    // Запускаємо асинхронно через агент
    \CAgent::AddAgent(
        "checkContragentAgent({$fields['id']}, '{$inn}');",
        'my_module',
        'N',
        60
    );
});

Періодична перепровірка

Компанії змінюють статус — ліквідуються, реорганізуються. Агент перепроверяет записи старше 30 днів:

function reCheckContragentsAgent(): string
{
    $connection = \Bitrix\Main\Application::getConnection();
    $rows = $connection->query(
        "SELECT ID, UF_INN FROM b_hl17_company_requisites
         WHERE UF_LAST_CHECK < DATE_SUB(NOW(), INTERVAL 30 DAY)
         LIMIT 50"
    );

    $checker = new DadataContragentChecker(DADATA_API_KEY, DADATA_SECRET);

    while ($row = $rows->fetch()) {
        $data = $checker->getByInn($row['UF_INN']);
        if ($data) {
            updateHlBlockRecord($row['ID'], $data);
        }
    }

    return __FUNCTION__ . '();';
}

Ліміт 50 записів за запуск — щоб агент не перевищував час виконання PHP.

Терміни реалізації

Обсяг завдання Склад Термін
Автодовипадання реквізитів за ІНН (Dadata) AJAX + кеш + форма реєстрації 2–4 дні
HL-блок контрагентів + фоновий агент Зберігання + періодична перевірка 1 тиждень
Повна інтеграція (CRM + скоринг + сповіщення) Контур.Фокус або СПАРК + інтеграція з CRM 2–3 тижні