Реалізація дропшипінгу на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

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

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація дропшипінгу на сайті
Складна
~1-2 тижні
Часті питання

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

Етапи розробки
Останні роботи
  • 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

Реалізація дропшипінгу на веб-сайті

З технічної точки зору, дропшипінг — це шар абстракції між покупцем та поставщиком. Магазин зберігає тільки дані про товари та замовлення, фізичних запасів немає. Реалізація вимагає трьох взаємопов'язаних підсистем: імпорту та синхронізації каталогу, передачі замовлень поставщику та відстеження статусів доставки. Жодну з них не можна відкласти — без синхронізації залишків магазин приймає замовлення на товари, які немає у поставщика.

Архітектура системи

┌─────────────────────────────────────────────────────────┐
│                   Інтернет-магазин                      │
│                                                         │
│  Каталог товарів   Кошик/Оформлення   Особистий кабінет │
│        │                  │                   │         │
│        └──────────────────┼───────────────────┘         │
│                           │                             │
│              ┌────────────▼─────────────┐               │
│              │   Dropshipping Kernel    │               │
│              │  - Supplier Router       │               │
│              │  - Stock Aggregator      │               │
│              │  - Price Calculator      │               │
│              │  - Order Dispatcher      │               │
│              └────────────┬─────────────┘               │
└───────────────────────────┼─────────────────────────────┘
                            │
           ┌────────────────┼────────────────┐
           │                │                │
    ┌──────▼──────┐  ┌──────▼──────┐  ┌──────▼──────┐
    │ Поставщик 1 │  │ Поставщик 2 │  │ Поставщик N │
    │  REST API   │  │  FTP + CSV  │  │  SOAP/XML   │
    └─────────────┘  └─────────────┘  └─────────────┘

Моделі даних

// Поставщик
Schema::create('dropship_suppliers', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('slug')->unique();
    $table->enum('integration_type', ['api', 'csv', 'xml', 'soap']);
    $table->jsonb('credentials')->nullable(); // зашифровано через $casts + Crypt
    $table->string('api_endpoint')->nullable();
    $table->integer('processing_days')->default(1); // термін збирання замовлення
    $table->decimal('default_margin', 5, 2)->default(30.00); // % маржі
    $table->boolean('is_active')->default(true);
    $table->timestamps();
});

// Товар поставщика (вихідні дані)
Schema::create('dropship_products', function (Blueprint $table) {
    $table->id();
    $table->foreignId('supplier_id')->constrained('dropship_suppliers');
    $table->string('supplier_sku'); // артикул поставщика
    $table->string('name');
    $table->text('description')->nullable();
    $table->decimal('supplier_price', 10, 2);
    $table->integer('supplier_stock')->default(0);
    $table->jsonb('attributes')->nullable();
    $table->string('image_url')->nullable();
    $table->foreignId('product_id')->nullable()->constrained('products'); // прив'язка до товару магазину
    $table->timestamp('synced_at')->nullable();
    $table->timestamps();

    $table->unique(['supplier_id', 'supplier_sku']);
});

Ядро дропшипінгу

class DropshippingKernel
{
    public function __construct(
        private SupplierRepositoryInterface $suppliers,
        private PriceCalculator $priceCalculator,
        private OrderDispatcher $orderDispatcher,
    ) {}

    /**
     * Отримати остаточну ціну товару з урахуванням маржі поставщика
     */
    public function calculateRetailPrice(DropshipProduct $dp): float
    {
        $supplier = $dp->supplier;
        $margin   = $dp->margin_override ?? $supplier->default_margin;

        return $this->priceCalculator->calculate(
            supplierPrice: $dp->supplier_price,
            marginPercent: $margin,
        );
    }

    /**
     * Перевірити доступність товару у поставщика в реальному часі
     */
    public function checkAvailability(DropshipProduct $dp): StockResult
    {
        $connector = SupplierConnectorFactory::make($dp->supplier);
        return $connector->checkStock($dp->supplier_sku);
    }

    /**
     * Передати замовлення поставщику після підтвердження оплати
     */
    public function dispatchOrder(Order $order): void
    {
        // Групування позицій за поставщиками
        $bySupplier = $order->items->groupBy(
            fn($item) => $item->product->dropshipProduct?->supplier_id
        );

        foreach ($bySupplier as $supplierId => $items) {
            if (!$supplierId) continue; // власні товари — пропускаємо

            $this->orderDispatcher->dispatch(
                supplier: Supplier::find($supplierId),
                order: $order,
                items: $items,
            );
        }
    }
}

Коннектори поставщиків

Кожен поставщик вимагає свого коннектора. Базовий інтерфейс:

interface SupplierConnectorInterface
{
    public function getProducts(int $page = 1, int $perPage = 100): array;
    public function checkStock(string $sku): StockResult;
    public function placeOrder(SupplierOrderDTO $dto): SupplierOrderResult;
    public function getOrderStatus(string $supplierOrderId): OrderStatusResult;
}

Реалізація для поставщика з REST API:

class RestApiSupplierConnector implements SupplierConnectorInterface
{
    public function __construct(
        private readonly Supplier $supplier,
        private readonly \GuzzleHttp\Client $http,
    ) {}

    public function placeOrder(SupplierOrderDTO $dto): SupplierOrderResult
    {
        // Реалізація REST API
    }
}

Графік реалізації

  • Моделі даних + основи дропшипінг ядра: 2–3 дні
  • Один коннектор поставщика (REST API): 1–2 дні
  • Синхронізація каталогу + реальна синхронізація запасів: 1–2 дні
  • Система передачі замовлень + сповіщення поставщику: 2–3 дні
  • Відстеження доставки + сповіщення клієнтам: 1 день
  • Інтерфейс адміністратора для управління маржею: 1 день

Всього: 8–12 робочих днів для повної системи дропшипінгу.