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

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Синхронізація замовлень між сайтом та маркетплейсами
Складна
~5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • 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

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

Замовлення з маркетплейсів і з сайту обробляються в єдиній системі: єдиний склад, єдина CRM, єдина логіка статусів. Маркетплейс бачить оновлення статусу; менеджер бачить всі замовлення в одному інтерфейсі.

Паттерн единої черги замовлень

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);
    }
}

Машина станів

class OrderStatusMachine
{
    private array $statusMap = [
        // unified → специфічні маркетплейсу
        '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);
        }
    }
}

Обробка повернень

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);
    }
}

Строки

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