Інтеграція 1С з Magento 2

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція 1С з Magento 2
Складна
~2-4 тижні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція 1С з Magento 2

Двунаправлена синхронізація Magento 2 і 1С — стандартне завдання для російського e-commerce: каталог і ціни з 1С, замовлення у 1С, залишки в реальному часі. Складніше ніж з OpenCart через Magento-специфічні поняття (attribute sets, configurable products, MSI).

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

1С ←→ Шар інтеграції ←→ Magento 2

Шар інтеграції:
- Черга (RabbitMQ / Redis)
- Трансформер (формат 1С ↔ формат Magento)
- Обробник помилок
- Retry логіка

Пряме з'єднання 1С → Magento REST API працює, але ненадійно при навантаженні. Проміжний шар з чергою — правильний підхід.

HTTP-сервіс 1С для експорту даних

// 1С: HTTP-сервіс ProductsService
// Метод GET /products
Function GetProducts(Request)
    MassiveOfGoods = New Array;

    Selection = Catalogs.Nomenclature.Select();
    While Selection.Next() Do
        If NOT Selection.IsFolder Then
            Good = New Structure;
            Good.Insert("sku",       String(Selection.Ref.UniqueId()));
            Good.Insert("name",      Selection.Name);
            Good.Insert("price",     InformationRegisters.PricesOfNomenclature.GetLast(Selection.Ref).Price);
            Good.Insert("quantity",  AccumulationRegisters.GoodsInWarehouses.BalanceOfGoods(Selection.Ref));
            MassiveOfGoods.Add(Good);
        EndIf;
    EndDo;

    Response = New HTTPServiceResponse(200);
    Response.SetBodyFromString(Format.JSON.Write(MassiveOfGoods));
    Return Response;
EndFunction

Імпорт з 1С у Magento 2 (Python integration worker)

import requests
import json
from magento.models.product import Product

class OneCMagentoSync:
    def __init__(self, m2_url, m2_token, onec_url, onec_auth):
        self.m2_url = m2_url
        self.m2_headers = {"Authorization": f"Bearer {m2_token}", "Content-Type": "application/json"}
        self.onec_url = onec_url
        self.onec_auth = onec_auth

    def sync_products(self):
        # Отримати товари з 1С
        response = requests.get(f"{self.onec_url}/products", auth=self.onec_auth)
        products_1c = response.json()

        for product_data in products_1c:
            self.upsert_product(product_data)

    def upsert_product(self, data: dict):
        sku = data['sku']

        # Перевірити існування у Magento
        check = requests.get(f"{self.m2_url}/rest/V1/products/{sku}", headers=self.m2_headers)

        payload = {
            "product": {
                "sku": sku,
                "name": data['name'],
                "price": float(data['price']),
                "status": 1,
                "type_id": "simple",
                "attribute_set_id": 4,
                "extension_attributes": {
                    "stock_item": {
                        "qty": int(data['quantity']),
                        "is_in_stock": int(data['quantity']) > 0
                    }
                }
            }
        }

        if check.status_code == 200:
            # Оновити
            requests.put(f"{self.m2_url}/rest/V1/products/{sku}",
                        headers=self.m2_headers, json=payload)
        else:
            # Створити
            requests.post(f"{self.m2_url}/rest/V1/products",
                         headers=self.m2_headers, json=payload)

Синхронізація залишків (MSI)

Magento 2.3+ використовує Multi-Source Inventory. Оновлення залишків через MSI API:

def update_stock_msi(self, sku: str, source_code: str, qty: float):
    payload = {
        "sourceItems": [{
            "sku": sku,
            "source_code": source_code,
            "quantity": qty,
            "status": 1 if qty > 0 else 0
        }]
    }
    requests.post(f"{self.m2_url}/rest/V1/inventory/source-items",
                 headers=self.m2_headers, json=payload)

Експорт замовлень у 1С

def export_orders_to_1c(self):
    # Отримати необроблені замовлення
    response = requests.get(
        f"{self.m2_url}/rest/V1/orders",
        params={
            "searchCriteria[filter_groups][0][filters][0][field]": "status",
            "searchCriteria[filter_groups][0][filters][0][value]": "pending",
            "searchCriteria[pageSize]": 50
        },
        headers=self.m2_headers
    )

    orders = response.json()['items']

    for order in orders:
        order_1c = self.transform_order(order)

        # Надіслати в 1С
        result = requests.post(
            f"{self.onec_url}/orders",
            json=order_1c,
            auth=self.onec_auth,
            timeout=10
        )

        if result.status_code == 200:
            # Позначити замовлення як передане в 1С
            requests.post(
                f"{self.m2_url}/rest/V1/orders/{order['entity_id']}/comments",
                headers=self.m2_headers,
                json={"statusHistory": {"comment": "Передано в 1С", "status": "processing"}}
            )

Черга для надійності

import pika  # RabbitMQ

def publish_to_queue(self, event_type: str, data: dict):
    connection = pika.BlockingConnection(pika.URLParameters(RABBITMQ_URL))
    channel = connection.channel()
    channel.queue_declare(queue='magento_1c_sync', durable=True)
    channel.basic_publish(
        exchange='',
        routing_key='magento_1c_sync',
        body=json.dumps({"type": event_type, "data": data}),
        properties=pika.BasicProperties(delivery_mode=2)  # persistent
    )
    connection.close()

Терміни

Базова синхронізація (каталог + залишки в одну сторону) — 10–14 днів. Двостороння інтеграція з замовленнями, чергою й моніторингом — 3–4 тижні.