Синхронізація замовлень: єдина система для сайту та маркетплейсів

Менеджери витрачають години на ручне перенесення замовлень між сайтом і маркетплейсами, що призводить до помилок і затримок. Ми розробляємо єдину систему, яка автоматично синхронізує замовлення з Ozon, Wildberries та Яндекс.Маркетом у вашій обліковій системі. Наша команда реалізує інтеграцію під ключ — від налаштування API до підтримки, забезпечуючи надійну роботу без втрати даних.

Розробка та обслуговування будь-яких видів сайтів:

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

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

Синхронізація замовлень: єдина система для сайту та маркетплейсів

Маркетплейси та мультивендорні платформиСкладний~5 днів
Часті запитання

Щодня менеджери витрачають години на перемикання між особистими кабінетами Ozon, Wildberries та Яндекс.Маркету — замовлення плутаються, склад іде в мінус, а клієнти скаржаться на затримки. Помилки при ручному введенні сягають 5% замовлень, що призводить до надлишкового резервування та невдоволення. Ми вирішуємо це однією інтеграцією: замовлення з усіх каналів потрапляють у єдину систему управління замовленнями вашого сайту. Наш досвід — понад 5 років на ринку, 50+ проєктів з інтеграції маркетплейсів. Ми знаємо, як нормалізувати сирі дані з кожного API, побудувати надійну чергу та не втратити жодного замовлення.

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

Як працює синхронізація замовлень?

Архітектура будується на паттерні черга-адаптер-нормалізатор. Кожен маркетплейс (Ozon, WB, YM та інші) має свій адаптер, який перетворює сиру відповідь API в єдину структуру UnifiedOrder. Після нормалізації замовлення потрапляють у спільну базу, де їх обробляє статусна машина.

Ми використовуємо чергу на Redis або RabbitMQ для гарантії доставки. Якщо один з маркетплейсів тимчасово недоступний, замовлення не втрачаються — вони чекають у черзі та обробляються після відновлення з'єднання. Ідемпотентність забезпечується унікальним sourceOrderId: повторний запит не створить дубль.

Ozon Order ─────┐ WB Order ──────┼──→ Order Normalizer ──→ Unified Orders DB ──→ Processing
YM Order ─────┘
↓
Site Order ─────────────────────────────→ WMS / ERP / 1С

Нормалізована структура замовлення

class UnifiedOrder {
    public string $id;
    public string $source; // 'site', 'ozon', 'wb', 'yandex_market'
    public string $sourceOrderId; // ID замовлення в системі джерела
    public string $status; // mapped to unified statuses
    public Customer $customer;
    public array $items; // [{product_id, sku, quantity, price}]
    public Shipping $shipping;
    public float $total;
    public string $createdAt;
}

Адаптери для кожного маркетплейсу

interface MarketplaceAdapter {
    public function getNewOrders(): array;
    public function toUnifiedOrder(array $raw): UnifiedOrder;
    public function updateStatus(string $orderId, string $status): void;
}

class OzonAdapter implements MarketplaceAdapter {
    public function toUnifiedOrder(array $raw): UnifiedOrder {
        return new UnifiedOrder(
            source: 'ozon',
            sourceOrderId: $raw['posting_number'],
            status: $this->mapStatus($raw['status']),
            customer: new Customer(
                name: $raw['customer']['name'],
                phone: $raw['customer']['phone'] ?? null,
            ),
            items: array_map(fn($item) => [
                'sku' => $item['offer_id'],
                'quantity' => $item['quantity'],
                'price' => $item['price'],
                'name' => $item['name'],
            ], $raw['products']),
            shipping: new Shipping(
                address: $raw['delivery_method']['warehouse'] ?? null,
                method: $raw['delivery_method']['name'],
            ),
            total: $raw['financial_data']['total_amount'],
            createdAt: $raw['created_at'],
        );
    }

    public function updateStatus(string $orderId, string $unifiedStatus): void {
        $ozonStatus = $this->reverseMapStatus($unifiedStatus);
        $this->ozon->updatePostingStatus($orderId, $ozonStatus);
    }
}

Чому важлива єдина статусна машина?

Без статусної машини кожен маркетплейс живе своїм життям: «сформовано», «очікує відвантаження», «передано в доставку». Менеджер вручну відстежує зміни та копіює статуси. Ми автоматизуємо це за допомогою мапінгу (див. скінченний автомат теорії). Крім того, статусна машина дозволяє уникнути N+1 запитів — замість періодичного опитування API ми використовуємо вебхуки або фонові перевірки з інтервалами, знижуючи навантаження на сервери маркетплейсів та ваш канал зв'язку.

class OrderStatusMachine {
    private array $statusMap = [
        'confirmed' => [
            'ozon' => 'awaiting_deliver',
            'wb' => 'confirm',
            'ym' => 'PROCESSING',
        ],
        'shipped' => [
            'ozon' => 'delivering',
            'wb' => 'complete',
            'ym' => 'DELIVERY',
        ],
    ];

    public function syncStatus(Order $order, string $newStatus): void {
        $order->update(['status' => $newStatus]);
        if ($order->source !== 'site') {
            $adapter = $this->getAdapter($order->source);
            $adapter->updateStatus($order->source_order_id, $newStatus);
        }
    }
}

Як обробляються повернення?

Повернення — часта головна біль. Клієнт відправив товар на Ozon, менеджер дізнається про це через тиждень. Наш ReturnProcessor миттєво створює повернення в системі та відновлює складські залишки. Він підтримує як повні, так і часткові повернення, автоматично перераховуючи комісії та повідомляючи відповідальних.

class ReturnProcessor {
    public function processMarketplaceReturn(array $returnData, string $source): void
    {
        $order = Order::where('source', $source)
            ->where('source_order_id', $returnData['order_id'])
            ->firstOrFail();

        Return::create([
            'order_id' => $order->id,
            'items' => $returnData['items'],
            'reason' => $returnData['reason'],
            'source' => $source,
        ]);

        // Відновлюємо залишок
        foreach ($returnData['items'] as $item) {
            Product::find($item['product_id'])?->increment('stock', $item['quantity']);
        }

        // Повідомляємо менеджера
        app(TelegramNotifier::class)->notifyReturn($order);
    }
}

Моніторинг та алерти

Система включає дашборд з ключовими метриками: кількість замовлень у черзі, час обробки, кількість помилок по кожному маркетплейсу. Налаштовуються алерти в Telegram або Slack при перевищенні порогів. Це дозволяє оперативно реагувати на збої, не даючи їм вплинути на клієнтів.

Що входить у роботу

Ми надаємо інтеграцію під ключ:

Етап Що робимо Результат
Аналітика Аудит поточних процесів, збір доступів до API маркетплейсів, документування бізнес-логіки Технічне завдання
Проектування Розробка схеми бази даних, статус-машини, черг Архітектурний документ
Розробка Реалізація адаптерів, нормалізатора, веб-хуків, обробника повернень Готовий код
Тестування Мок-тести на тестових замовленнях, інтеграційне тестування з реальними API Протокол тестування
Деплой та навчання Розгортання на production, навчання менеджерів роботі з єдиною панеллю Підключена система + документація

Строки

Синхронізація замовлень для 2–3 маркетплейсів з єдиною панеллю управління: 16–24 робочих дні. Вартість розраховується індивідуально залежно від кількості маркетплейсів та складності кастомних вимог. Отримайте консультацію для точної оцінки вашого проєкту.

Як порівняти: ручна робота vs автоматизація

Критерій Ручна робота (в середньому) Наша інтеграція
Час на синхронізацію статусів 1–2 години на день Автоматично, < 1 хвилина
Помилки при введенні даних ~5% замовлень 0%
Обробка повернень 2–3 дні 10 хвилин
Витрати на менеджера Суттєві (тисячі гривень щомісяця) Окупається за 2–3 місяці

Автоматизація скорочує витрати часу в 120 разів — замість 2 годин ручної роботи система робить все за хвилину. Ручна обробка повернень обходиться в помітну суму на зарплаті менеджера, наша інтеграція позбавляє цих витрат.

Типові помилки при самостійній інтеграції

  • Різні схеми найменування товарів. На сайті артикул «ABC-001», на Ozon — «ABC001». В результаті не збігаються залишки. Рішення: використовувати єдиний SKU у всіх системах.
  • Відсутність ідемпотентності. При повторному запиті замовлень створюються дублі. Рішення: перевірка за sourceOrderId перед вставкою.
  • Пропуск повернень. Маркетплейс не завжди надсилає повідомлення. Рішення: регулярні фонові перевірки через API.

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1374
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060