apiKey = $apiKey; $this->baseUrl = rtrim($baseUrl, '?&'); $this->useHeaderAuth = $useHeaderAuth; } /** * Выполнить GET-запрос к API */ private function request(array $params = []): array { $url = $this->baseUrl; if ($this->useHeaderAuth) { $url .= (strpos($url, '?') !== false ? '&' : '?') . http_build_query($params); } else { $params['api_key'] = $this->apiKey; $url .= (strpos($url, '?') !== false ? '&' : '?') . http_build_query($params); } $ch = curl_init($url); $headers = ['Accept: application/json']; if ($this->useHeaderAuth) { $headers[] = 'X-API-Key: ' . $this->apiKey; } curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_TIMEOUT => 30, ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($response === false) { return ['success' => false, 'error' => 'Request failed']; } $data = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { return ['success' => false, 'error' => 'Invalid JSON', 'raw' => $response]; } $data['_http_code'] = $httpCode; return $data; } /** * Получение дерева категорий каталога Wildberries */ public function getCategories(): array { return $this->request(['action' => 'categories']); } /** * Список товаров по категории * @param string $path Путь категории (например: elektronika/televizory-i-cifrovoe-tv) * @param int $page Номер страницы * @param string $sort popular|priceup|pricedown|rate|date * @param int $limit 0 = без ограничения */ public function getCategoryProducts(string $path, int $page = 1, string $sort = 'popular', int $limit = 0): array { $params = [ 'action' => 'category_products', 'path' => $path, 'page' => $page, 'sort' => $sort, ]; if ($limit > 0) { $params['limit'] = $limit; } return $this->request($params); } /** * Поиск товаров продавца по ID * @param string $supplierId ID продавца на Wildberries */ public function getSupplierArticles(string $supplierId, int $page = 1, string $sort = 'popular', int $limit = 0): array { $params = [ 'action' => 'supplier_articles', 'supplier_id' => $supplierId, 'page' => $page, 'sort' => $sort, ]; if ($limit > 0) { $params['limit'] = $limit; } return $this->request($params); } /** * Поиск товаров по ключевым словам * @param string $query Поисковый запрос */ public function keywordSearch(string $query, int $page = 1, string $sort = 'popular', int $limit = 10): array { $params = [ 'action' => 'keyword_search', 'query' => $query, 'page' => $page, 'sort' => $sort, 'limit' => $limit, ]; return $this->request($params); } /** * Получение отзывов с фотографиями по артикулу товара * @param string $artId Артикул товара на Wildberries */ public function getReviews(string $artId): array { return $this->request([ 'action' => 'reviews', 'art_id' => $artId, ]); } }