Інтеграція 1С-Бітрікс з RetailCRM

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

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

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

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс з RetailCRM

RetailCRM — спеціалізована CRM для ecommerce: складський облік, збирання замовлень, доставка, аналітика за когортами. Bitrix24 — універсальна CRM; RetailCRM — заточена під операційну роботу інтернет-магазину. Інтеграція є доцільною, коли обсяг замовлень перевищує 50–100 на добу.

Готовий модуль vs. власна інтеграція

RetailCRM надає офіційний модуль для 1С-Бітрікс через маркетплейс. Модуль покриває базові сценарії. Власна інтеграція потрібна, коли:

  • Нестандартні статуси замовлень або властивості, яких немає в модулі.
  • Складна логіка маппінгу (кілька магазинів, різні склади).
  • Потрібна інтеграція з іншими системами через RetailCRM (телефонія, служби доставки).

REST API RetailCRM v5

Базовий URL: https://yourdomain.retailcrm.ru/api/v5/. Автентифікація — заголовок X-API-KEY.

class RetailCRMClient {
    private string $apiKey;
    private string $siteKey; // код магазину в RetailCRM
    private string $baseUrl;

    public function createOrder(\Bitrix\Sale\Order $order): ?string {
        $basket = $order->getBasket();
        $props  = $order->getPropertyCollection();

        $items = [];
        foreach ($basket as $item) {
            $items[] = [
                'offer'    => ['xmlId' => (string)$item->getProductId()],
                'quantity' => $item->getQuantity(),
                'initialPrice' => $item->getBasePrice(),
                'discountPercent' => 0,
            ];
        }

        $orderData = [
            'number'      => 'BX-' . $order->getId(),
            'externalId'  => (string)$order->getId(),
            'site'        => $this->siteKey,
            'status'      => $this->mapStatus($order->getField('STATUS_ID')),
            'customer'    => [
                'externalId' => (string)$order->getUserId(),
                'email'      => $props->getUserEmail(),
                'phone'      => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
            ],
            'items'       => $items,
            'delivery'    => [
                'code'    => $this->mapDelivery($order->getDeliveryId()),
                'address' => ['text' => $this->getOrderAddress($props)],
            ],
            'paymentType' => $this->mapPayment($order->getPaymentSystemId()),
        ];

        $http = new \Bitrix\Main\Web\HttpClient();
        $http->setHeader('X-API-KEY', $this->apiKey);
        $http->setHeader('Content-Type', 'application/x-www-form-urlencoded');

        $response = json_decode($http->post(
            $this->baseUrl . 'orders/create',
            'order=' . urlencode(json_encode($orderData)) . '&site=' . $this->siteKey
        ), true);

        return $response['id'] ?? null; // ID замовлення в RetailCRM
    }
}

Двостороння синхронізація статусів

RetailCRM змінює статус замовлення (менеджер обробив, поставив на збірку, передав у доставку) — сайт повинен оновити статус.

RetailCRM підтримує вихідні вебхуки. Налаштовуємо в розділі «Адміністрування → Вебхуки»:

// Обробник вебхука від RetailCRM
$payload = json_decode(file_get_contents('php://input'), true);

foreach ($payload['orders'] as $orderData) {
    $externalId = $orderData['externalId']; // ID замовлення в 1С-Бітрікс
    $newStatus  = $statusMap[$orderData['status']] ?? null;

    if ($newStatus) {
        $order = \Bitrix\Sale\Order::load($externalId);
        $order->setField('STATUS_ID', $newStatus);
        $order->save();
    }
}

Маппінг довідників

RetailCRM зберігає довідники: статуси, типи доставки, методи оплати — кожен з кодом. Коди потрібно привести до кодів 1С-Бітрікс:

Статус 1С-Бітрікс Статус RetailCRM
N (новий) new
P (оплачений) complete-payment
D (доставляється) delivery
F (завершений) complete
C (скасований) cancel-other

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

Кейс: розрив синхронізації при піковому навантаженні

Магазин одягу під час розпродажу: 800 замовлень за 2 години. Пряма синхронна передача в RetailCRM при кожному OnSaleOrderSaved призвела до таймаутів — RetailCRM API відповідав із затримкою 3–5 секунд, що блокувало обробку замовлення на сайті.

Рішення: черга на основі агентів 1С-Бітрікс. Замовлення записуються в таблицю черги (b_retailcrm_queue), агент кожні 10 секунд надсилає порцію по 10 замовлень. Пікове навантаження згладжується, замовлення проходять за 1–5 хвилин.

Завдання Трудовитрати
Базова передача замовлень (сайт → RetailCRM) 6–8 год
Двостороння синхронізація статусів 6–10 год
Маппінг довідників і доставки 4–6 год
Черга та обробка помилок 6–8 год
Синхронізація каталогу товарів 8–12 год