Интеграция интернет-магазина с 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.







