Інтеграція інтернет-магазину з Ozon (Seller API)
Ozon Seller API — один з найбільш зрілих API серед російських маркетплейсів. Дозволяє управляти товарами, цінами, рівнями запасів, отримувати замовлення та управляти статусами без входу в особистий кабінет. Інтеграція магазину з Ozon дає можливість вести продажі на маркетплейсі, синхронізуючи дані з основним каталогом.
Аутентифікація
$headers = [
'Client-Id' => config('services.ozon.client_id'),
'Api-Key' => config('services.ozon.api_key'),
'Content-Type' => 'application/json',
];
$base = 'https://api-seller.ozon.ru';
Створення/оновлення товарів
class OzonProductService
{
public function upsertProduct(Product $product): void
{
$payload = [
'items' => [[
'attributes' => [
['id' => 9048, 'complex_id' => 0, 'values' => [['value' => $product->name]]],
['id' => 4191, 'complex_id' => 0, 'values' => [['value' => $product->brand]]],
['id' => 85, 'complex_id' => 0, 'values' => [['value' => $product->description]]],
],
'barcode' => $product->barcode ?? '',
'description_category_id' => $this->getCategoryId($product),
'name' => $product->name,
'offer_id' => $product->sku,
'price' => (string) $product->price,
'images' => $product->images->pluck('url')->all(),
'vat' => '0.2',
]]
];
$resp = Http::withHeaders($this->headers)
->post("{$this->base}/v3/product/import", $payload);
$taskId = $resp->json('result.task_id');
// Створення товару асинхронне — перевіряємо за task_id
$this->waitForTask($taskId);
}
private function waitForTask(string $taskId): void
{
for ($i = 0; $i < 30; $i++) {
sleep(2);
$status = Http::withHeaders($this->headers)
->post("{$this->base}/v1/product/import/info", ['task_id' => $taskId])
->json('result.items.0.status');
if ($status === 'imported') return;
if ($status === 'failed') throw new OzonImportException("Task {$taskId} failed");
}
throw new OzonImportException("Task {$taskId} timeout");
}
}
Оновлення цін та запасів
public function updatePrices(array $items): void
{
// items: [['offer_id' => 'SKU-123', 'price' => '1990', 'old_price' => '2490']]
Http::withHeaders($this->headers)
->post("{$this->base}/v1/product/import/prices", ['prices' => $items]);
}
public function updateStocks(array $items): void
{
// items: [['offer_id' => 'SKU-123', 'stock' => 15, 'warehouse_id' => 12345]]
Http::withHeaders($this->headers)
->post("{$this->base}/v2/products/stocks", ['stocks' => $items]);
}
Отримання замовлень
public function getNewOrders(): array
{
$resp = Http::withHeaders($this->headers)
->post("{$this->base}/v3/posting/fbs/list", [
'filter' => [
'since' => now()->subHours(24)->toIso8601String(),
'to' => now()->toIso8601String(),
'status' => 'awaiting_packaging',
],
'limit' => 50,
]);
return $resp->json('result.postings');
}
Статуси замовлень FBS
| Статус | Опис |
|---|---|
awaiting_packaging |
Очікує збірки |
awaiting_deliver |
Очікує передачі кур'єру |
delivering |
На доставці |
delivered |
Доставлено |
cancelled |
Скасовано |
Асинхронність API
Ozon активно використовує асинхронні завдання: створення товарів, масові оновлення запасів. Важливо правильно обробляти task_id та статуси.
Обмеження API
- Rate limits: 1 000 запитів на хвилину для більшості методів
- Батчинг: оновлення запасів — до 500 SKU за запит; ціни — до 1 000
Терміни
Інтеграція з Ozon Seller API (товари + ціни + запаси + замовлення): 12–18 робочих днів.







