Интеграция 1С-Битрикс с RetailCRM

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с RetailCRM
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с RetailCRM

RetailCRM — специализированная CRM для ecommerce: складской учёт, сборка заказов, доставка, аналитика по когортам. Битрикс24 — универсальная CRM; RetailCRM — заточена под операционную работу интернет-магазина. Интеграция предпочтительна, когда объём заказов превышает 50–100 в сутки.

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

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

  • Нестандартные статусы заказов или свойства, которых нет в модуле.
  • Сложная логика маппинга (несколько магазинов, разные склады).
  • Интеграция с другими системами через RetailCRM (телефония, delivery-сервисы).

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 заказа в Битриксе
    $newStatus  = $statusMap[$orderData['status']] ?? null;

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

Маппинг справочников

RetailCRM хранит справочники: статусы, типы доставки, методы оплаты — каждый с кодом. Коды нужно привести к кодам Битрикса:

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

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

Кейс: разрыв синхронизации при пиковой нагрузке

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

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

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