Інтеграція інтернет-магазину з Wildberries (API)
Wildberries — найбільший російський маркетплейс. API недостатньо задокументований та часто змінюється без попередження. Інтеграція потребує постійного моніторингу змін.
Аутентифікація
Wildberries використовує API-токени, видані в особистому кабінеті продавця:
class WildberriesClient
{
private string $apiToken;
private string $statsToken; // окремий токен для статистики
public function request(string $method, string $url, array $data = []): array
{
return Http::withHeaders([
'Authorization' => $this->apiToken,
'Content-Type' => 'application/json',
])->{strtolower($method)}($url, $data)->json();
}
}
Завантаження товарів
WB працює через картки товарів — специфічна структура з предметами та характеристиками:
public function createCard(Product $product): void
{
$payload = [[
'subjectID' => $this->getSubjectId($product->category),
'variants' => [[
'vendorCode' => $product->sku,
'title' => $product->name,
'description'=> $product->description,
'brand' => $product->brand,
'dimensions' => [
'length' => $product->length_cm,
'width' => $product->width_cm,
'height' => $product->height_cm,
'isValid'=> true,
],
'characteristics' => $this->mapCharacteristics($product),
]],
]];
$this->request('POST', 'https://content-api.wildberries.ru/content/v2/cards/upload', $payload);
}
Оновлення цін та знижок
WB розділяє базову ціну та знижку:
public function setPriceAndDiscount(string $sku, int $basePrice, int $discountPercent): void
{
// Встановлення базової ціни
$this->request('POST', 'https://discounts-prices-api.wildberries.ru/api/v2/upload/task', [
'data' => [[
'nmID' => $this->getNmId($sku),
'price' => $basePrice,
]]
]);
// Встановлення знижки
$this->request('POST', 'https://discounts-prices-api.wildberries.ru/api/v2/upload/task', [
'data' => [[
'nm' => $this->getNmId($sku),
'discount' => $discountPercent,
]]
]);
}
Оновлення запасів (FBS)
public function updateStocks(array $items): void
{
// items: [['sku' => 'SKU-123', 'amount' => 10]]
$this->request('PUT', 'https://marketplace-api.wildberries.ru/api/v3/stocks/{warehouseId}', [
'stocks' => array_map(fn($item) => [
'sku' => $item['sku'],
'amount' => $item['amount'],
], $items)
]);
}
Отримання замовлень FBS
public function getOrders(string $since): array
{
return $this->request('GET', 'https://marketplace-api.wildberries.ru/api/v3/orders', [
'limit' => 1000,
'next' => 0,
'dateFrom' => strtotime($since),
])['orders'] ?? [];
}
Типові складності
- Нестабільна документація: методи змінюються, URL застарівають
-
Різні домени для різних API:
content-api,discounts-prices-api,marketplace-api,statistics-api— у кожного свій базовий URL та іноді власна авторизація -
NmID vs vendorCode: WB використовує внутрішній числовий ідентифікатор
nmID, який потрібно узгоджувати з вашимsku/vendorCode - Статуси замовлень змінюються непередбачено, потрібен polling
Терміни
Інтеграція з WB (товари + ціни + запаси + замовлення): 14–20 робочих днів з урахуванням особливостей нестабільного API.







