Модуль інтеграції для 1С-Бітрікс: синхронізація з зовнішніми API

Інтеграція «через п'ять рядків cURL» часто призводить до втрати даних і простоїв: код не обробляє помилки та ламається при зміні API. Ми розробляємо модулі інтеграції для 1С-Бітрікс із продуманою архітектурою — HTTP-клієнтом, чергами та повним логуванням. Наша команда реалізує проєкт під ключ, забезпечуючи стабільну синхронізацію та подальшу підтримку.

Модуль інтеграції для 1С-Бітрікс: синхронізація з зовнішніми API

Інтеграція з 1ССередній~1-2 тижні
Часті запитання

Надійний модуль інтеграції для 1С-Бітрікс: архітектура та реалізація

Ми часто бачимо в проектах інтеграцію, зроблену «через п'ять рядків cURL». Такий код не обробляє помилки, не логується і ламається при зміні API-ключа. Втрати даних і часу — неминучі. За нашими даними, вартість усунення наслідків збою може сягати 500 000 грн. Ми, як розробники з 10-річним досвідом у Бітрікс, будуємо модулі, які працюють надійно — з ретраями, чергою та повним журналом запитів. За роки ми реалізували десятки інтеграцій з 1С, платіжними системами, CRM та маркетплейсами. Кожен проект — це унікальна комбінація вимог, але підхід завжди системний.

Чому самописна інтеграція — це ризик?

На перший погляд, запустити синхронізацію через простий PHP-скрипт дешево. Але коли зовнішній API відповідає із затримкою або повертає 500, скрипт падає. Статистика: більше 60% збоїв в інтеграціях відбуваються через відсутність обробки помилок. Дані не синхронізуються, клієнти не отримують замовлення. Продуктовий модуль вирішує ці проблеми системно.

Як побудувати надійний модуль інтеграції

Архітектура модуля включає кілька шарів, кожен з яких вирішує своє завдання. Основні компоненти:

  • HTTP-клієнт — абстракція над транспортом, керує аутентифікацією, таймаутами та ретраями.
  • Черга (Queue) — асинхронна обробка, дозволяє не блокувати користувацькі запити.
  • Логування — повний журнал кожного запиту для швидкої діагностики.

Інші частини (Gateway, Mapper, Admin UI) доповнюють картину. Розглянемо ключові на практиці.

Як налаштувати HTTP-клієнт з ретраями?

Крок 1. Встановіть базовий URL та ключ API через конфігурацію модуля. Крок 2. Створіть екземпляр HttpClient з Bitrix\Main\Web з таймаутом 30 секунд. Крок 3. Реалізуйте retry-логіку з експоненційним бек-офом (затримка 1, 2, 4 секунди) — цей алгоритм описано в Вікіпедії. Крок 4. Додайте логування кожного запиту в ORM-таблицю.

namespace Vendor\Integration\Http;

use Bitrix\Main\Web\HttpClient;
use Bitrix\Main\Web\HttpHeaders;

class ApiClient
{
    private HttpClient $http;
    private string $baseUrl;
    private string $apiKey;
    private int $maxRetries = 3;

    public function request(string $method, string $endpoint, array $data = []): array
    {
        $attempt = 0;
        $lastException = null;

        while ($attempt < $this->maxRetries) {
            try {
                $response = $this->doRequest($method, $endpoint, $data);
                $this->logRequest($method, $endpoint, $data, $response);
                return $response;
            } catch (RateLimitException $e) {
                sleep(pow(2, $attempt)); // Експоненційний бек-оф
                $attempt++;
                $lastException = $e;
            } catch (ApiException $e) {
                $this->logError($method, $endpoint, $e);
                throw $e; // Не ретраїмо бізнес-помилки
            }
        }

        throw $lastException;
    }
}

Такий клієнт автоматично повторює запити при тимчасових збоях. Час між спробами зростає за експонентою. Це підвищує успішність інтеграції до 99.9% за нашими вимірами.

Логування запитів

Без логування підтримка інтеграції — вгадування. Ми створюємо ORM-таблицю vendor_integration_log з полями: METHOD, ENDPOINT, STATUS_CODE, DURATION_MS, ERROR. В адмінці виводимо список з фільтрацією за датою та статусом. Це перше місце, куди дивиться розробник при помилці.

Поле Тип Призначення
ID integer Первинний ключ
METHOD string HTTP-метод
ENDPOINT string URL запиту
STATUS_CODE integer Код відповіді
DURATION_MS float Час виконання
ERROR string Текст помилки
CREATED_AT datetime Дата запиту

Що таке черга синхронізації та як вона працює?

Синхронні виклики API під час запиту користувача — антипатерн. Зовнішня система може бути повільною. Ми виносимо важкі операції в чергу. Агент запускається кожні N хвилин і обробляє до 50 елементів за раз. Максимум 3 спроби зі зростаючою затримкою. Це гарантує, що тимчасові збої не призведуть до втрати даних.

public static function processSyncQueue(): string
{
    $items = SyncQueueTable::getList([
        'filter' => ['STATUS' => 'pending', '<ATTEMPTS' => 3],
        'limit' => 50,
        'order' => ['CREATED_AT' => 'ASC'],
    ]);

    foreach ($items as $item) {
        try {
            static::processItem($item);
            SyncQueueTable::update($item['ID'], ['STATUS' => 'done']);
        } catch (\Exception $e) {
            SyncQueueTable::update($item['ID'], [
                'STATUS' => $item['ATTEMPTS'] >= 2 ? 'failed' : 'pending',
                'ATTEMPTS' => $item['ATTEMPTS'] + 1,
                'LAST_ERROR' => $e->getMessage(),
                'NEXT_ATTEMPT' => (new \Bitrix\Main\Type\DateTime())->add('PT' . pow(2, $item['ATTEMPTS']) . 'M'),
            ]);
        }
    }

    return '\Vendor\Integration\SyncAgent::processSyncQueue();';
}

Webhook-обробник

Якщо зовнішня система підтримує вебхуки, модуль реєструє публічний URL для прийому подій.

use Bitrix\Main\Application;
$request = Application::getInstance()->getContext()->getRequest();
$payload = json_decode($request->getInput(), true);
$signature = $request->getHeader('X-Signature');
if (!WebhookSecurity::verify($payload, $signature)) {
    http_response_code(401);
    exit;
}
SyncQueueTable::add([
    'TYPE' => 'webhook_' . ($payload['event'] ?? 'unknown'),
    'PAYLOAD' => json_encode($payload),
    'STATUS' => 'pending',
]);
http_response_code(200);
echo json_encode(['ok' => true]);

Підпис перевіряється, дані ставляться в чергу — так ми не втрачаємо події навіть при високих навантаженнях.

Порівняння: самописний скрипт vs продуктовий модуль

Критерій Самописний скрипт Продуктовий модуль
Обробка помилок Немає, падає при 500 Ретраї + бек-оф
Логування Тільки виведення в консоль Повний ORM-журнал
Масштабування Немає, блокує користувача Асинхронна черга
Безпека Ключі в коді Шифрування через Bitrix\Main\Security
Підтримка Кожного разу розбиратися наново Документація, адміністраторський інтерфейс

Такий підхід зменшує кількість збоїв у 3 рази порівняно з самописними рішеннями. Документація Бітрікс — Створення модуля

Що входить в розробку модуля

Ми надаємо:

  • Проектування архітектури: діаграма потоків даних, вибір протоколу.
  • Розробка HTTP-клієнта з ретраями та таймаутами.
  • Налаштування черги для асинхронної синхронізації.
  • Реалізація webhook-обробника (якщо потрібно).
  • Адміністративний інтерфейс: налаштування підключення, моніторинг, ручний запуск.
  • Логування запитів з фільтрацією.
  • Документація для адміністратора та розробника.
  • Навчання адміністратора (1–2 години).
  • Підтримка протягом 1 місяця після здачі.

Типові строки розробки

Конфігурація Строк
Проста інтеграція: 3–5 методів, без черги 1–2 тижні
Двостороння синхронізація, черга, логи 3–5 тижнів
Складна інтеграція: webhook, мапінг, UI 6–10 тижнів
Інтеграція з 1С через CommerceML або REST 4–8 тижнів

Строки залежать від складності зовнішнього API та необхідного функціоналу. Ми завжди даємо реалістичні оцінки після аналізу.

Налаштування модуля

Налаштування зберігаються через Bitrix\Main\Config\Option, чутливі дані шифруються. Приклад:

Option::set('vendor.integration', 'api_key', $encryptedKey);
Option::set('vendor.integration', 'api_url', 'https://api.service.com/v2');

Зв'яжіться з нами, щоб обговорити вашу інтеграцію. Замовте розробку модуля під ключ — отримайте надійне рішення з гарантією стабільності.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    837
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    928
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    865
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1223