- Работа с API Яндекс.Маркета для модели FBS в PHP
- Добавление и обновление товаров
- Ответ в случаи успеха:
- Обновление цен
- Ответ в случаи успеха:
- Обновление остатков
- Ответ в случаи успеха:
- PHP SDK
- Требования
- Установка
- Пример использования
- PHP SDK
- Требования
- Установка
- Пример использования
- PHP SDK
- Installation
- Usage example
- PHP SDK
- Requirements
- Installation
- Usage example
Работа с API Яндекс.Маркета для модели FBS в PHP
Примеры запросов к API Яндекс Маркета (добавление товаров, обновление цен и остатков) из PHP.
Для доступа к API понадобится:
- $token – OAuth-токен, подробнее о получении OAuth-токена;
- $client_id – Идентификатор приложения;
- $campaign_id – Идентификатор кампании, в личном кабинете, в меню слева выберите Настройки → Настройки API и скопируйте из поля Номер кампании число после дефиса.
Добавление и обновление товаров
В данном примере формируется запрос к API Маркета на добавление сразу нескольких товаров из БД магазина:
prepare("SELECT * FROM `prods` WHERE `market` = 1 LIMIT 100"); $sth->execute(); $prods = $sth->fetchAll(PDO::FETCH_ASSOC); if (!empty($prods)) < $offers = array(); foreach ($prods as $i =>$prod) < $offer = array( 'offer' =>array( 'shopSku' => $prod['id'], 'name' => $prod['name'], 'category' => $prod['category'], 'manufacturer' => '', 'manufacturerCountries' => explode(',', $prod['countries']), 'weightDimensions' => array( 'length' => $prod['length'], 'width' => $prod['width'], 'height' => $prod['height'], 'weight' => $prod['weight'] ), 'urls' => array( 'https://example.com/prod/' . $prod['id'] ), 'pictures' => array( 'https://example.com/img/' . $prod['img_1'], 'https://example.com/img/' . $prod['img_2'], ), 'vendor' => $prod['brands'], 'vendorCode' => $prod['sku'], 'barcodes' => array( $prod['barcode'], ), 'description' => $prod['text'], //'shelfLife' => array( // 'timePeriod' => 0, // 'timeUnit' => '', // 'comment' => '' //), //'lifeTime' =>array( // 'timePeriod' => 0, // 'timeUnit' => '', // 'comment' => '' //), //'guaranteePeriod' => array( // 'timePeriod' => 0, // 'timeUnit' => '', // 'comment' => '' //), //'customsCommodityCodes' => array(), //'certificate' => '', //'transportUnitSize' => 0, //'minShipment' => 0, //'quantumOfSupply' => 0, //'supplyScheduleDays' => array(0), //'deliveryDurationDays' => 0, //'boxCount' => 1, //'shelfLifeDays' => 0, //'lifeTimeDays' => 0, //'guaranteePeriodDays' => 0 ), 'mapping' => array( 'marketSku' => 0 ) ); $offers[] = $offer; > $data = array( 'offerMappingEntries' => $offers ); $ch = curl_init("https://api.partner.market.yandex.ru/v2/campaigns//offer-mapping-entries/updates.json"); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: OAuth oauth_token="' . $token . '", oauth_client_id="' . $client_id . '"', 'Content-Type:application/json' )); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); print_r($res); >
Ответ в случаи успеха:
Обновление цен
В данном примере цены задаются для нескольких товаров из БД магазина.
Параметр discountBase следует передавать только в том случае, если у товара есть скидка иначе API вернет ошибку.
prepare("SELECT * FROM `prods` WHERE `market` = 1 LIMIT 100"); $sth->execute(); $prods = $sth->fetchAll(PDO::FETCH_ASSOC); if (!empty($prods)) < $offers = array(); foreach ($prods as $i =>$prod) < $price = $prod['price']; $offer = array( 'id' =>$prod['id'], 'price' => array( 'currencyId' => 'RUR', 'value' => $price ), ); if ($prod['price_old'] > 0 && $prod['price_old'] > $price) < $offer['price']['discountBase'] = $prod['price_old']; >$offers[] = $offer; > $data = array( 'offers' => $offers ); $ch = curl_init("https://api.partner.market.yandex.ru/v2/campaigns//offer-prices/updates.json"); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: OAuth oauth_token="' . $token . '", oauth_client_id="' . $client_id . '"', 'Content-Type:application/json' )); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); print_r($res); >
Ответ в случаи успеха:
Обновление остатков
$warehouse_id – идентификатор склада, в личном кабинете в разделе Логистика → Склады. Он указан в поле ID склада.
prepare("SELECT * FROM `prods` WHERE `market` = 1 LIMIT 100"); $sth->execute(); $prods = $sth->fetchAll(PDO::FETCH_ASSOC); if (!empty($prods)) < $skus = array(); foreach ($prods as $i =>$prod) < $sku = array( 'sku' =>$prod['id'], 'warehouseId' => $warehouse_id, 'items' => array( array( 'type' => 'FIT', 'count' => $prod['count'], 'updatedAt' => date('c'), ) ), ); $skus[] = $sku; > $data = array( "skus" => $skus ); $ch = curl_init("https://api.partner.market.yandex.ru/v2/campaigns//offers/stocks.json"); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: OAuth oauth_token="' . $token . '", oauth_client_id="' . $client_id . '"', 'Content-Type:application/json' )); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); print_r($res); >
Ответ в случаи успеха:
PHP SDK
Внимание. Маркет постепенно перестает поддерживать XML. Поэтому мы рекомендуем переходить на JSON. Сейчас XML можно использовать, если добавить в запрос Content-Type: application/xml . Без этого будут ошибки.
Требования
Зарегистрированное приложение с авторизационным токеном. Токен можно получить вручную или с помощью библиотеки для работы с OAuth yandex-market-php-oauth.
Установка
Библиотека устанавливается с помощью пакетного менеджера Composer.
require __DIR__ . '/vendor/autoload.php';
>\">Пример использования
Выведем на экран список всех магазинов пользователя Яндекса, на которого зарегистрировано приложение:
// Указываем авторизационные данные\n$clientId = '9876543210fedcbaabcdef0123456789'\n$token = '01234567-89ab-cdef-fedc-ba9876543210';\n\n// Создаем экземпляр клиента с базовыми методами\n$baseClient = new \\Yandex\\Market\\Partner\\Clients\\BaseClient($clientId, $token);\n\n// Магазины возвращаются постранично\n$pageNumber = 0;\ndo \n \n // Получаем информацию о страницах. Возвращаемое количество страниц может \n // увеличиваться по мере увеличения номера страницы. Последняя страница будет \n // достигнута, когда вернется количество страниц, равное номеру текущей страницы \n $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount();\n> while ($pageNumber != $campaignsTotalPages);
PHP SDK
Внимание. Маркет постепенно перестает поддерживать XML. Поэтому мы рекомендуем переходить на JSON. Сейчас XML можно использовать, если добавить в запрос Content-Type: application/xml . Без этого будут ошибки.
Требования
Зарегистрированное приложение с авторизационным токеном. Токен можно получить вручную или с помощью библиотеки для работы с OAuth yandex-market-php-oauth.
Установка
Библиотека устанавливается с помощью пакетного менеджера Composer.
require __DIR__ . '/vendor/autoload.php';
>">СкопированоПример использования
Выведем на экран список всех магазинов пользователя Яндекса, на которого зарегистрировано приложение:
// Указываем авторизационные данные $clientId = '9876543210fedcbaabcdef0123456789' $token = '01234567-89ab-cdef-fedc-ba9876543210'; // Создаем экземпляр клиента с базовыми методами $baseClient = new \Yandex\Market\Partner\Clients\BaseClient($clientId, $token); // Магазины возвращаются постранично $pageNumber = 0; do < $pageNumber++; // Получаем страницу магазинов с номером pageNumber $campaignsObject = $baseClient->getCampaigns(['page' => $pageNumber,]); // Получаем итератор по магазинам на странице $campaignsPage = $campaignsObject->getCampaigns(); // Получаем количество магазинов на странице $campaignsCount = $campaignsPage->count(); // Получаем первый магазин $campaign = $campaignsPage->current(); // Печатаем идентификатор и URL магазина, затем переходим к следующему for ($i = 0; $i < $campaignsCount; $i++) < echo 'ID: ' . $campaign->getId(); echo 'Domain: ' . $campaign->getDomain(); $campaign = $campaignsPage->next(); > // Получаем информацию о страницах. Возвращаемое количество страниц может // увеличиваться по мере увеличения номера страницы. Последняя страница будет // достигнута, когда вернется количество страниц, равное номеру текущей страницы $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount(); > while ($pageNumber != $campaignsTotalPages);
PHP SDK
A store registered in Yandex.Market. For more information, see How to list store products in Yandex.Market in Yandex.Market Help for stores.
Registered application with an authorization token. You can get a token manually or using the yandex-market-php-oauth RU library for working with OAuth.
Installation
The library is installed using the Composer package manager.
require __DIR__ . '/vendor/autoload.php';
>\">Usage example
Let's display a list of all the stores for the Yandex user that the app is registered to.
// Specify authorization data\n$clientId = '9876543210fedcbaabcdef0123456789'\n$token = '01234567-89ab-cdef-fedc-ba9876543210';\n\n// Create a client instance with basic methods\n$baseClient = new \\Yandex\\Market\\Partner\\Clients\\BaseClient($clientId, $token);\n\n// Stores are returned page by page\n$pageNumber = 0;\ndo \n \n // Get information about pages. The number of pages returned \n // increases with the page number. The last page will be \n // reached when the number of pages equal to the current page number is returned \n $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount();\n> while ($pageNumber != $campaignsTotalPages);
PHP SDK
The yandex-market-php-partner RU library was developed for working with the Yandex.Market Partner API in PHP.
Requirements
A store registered in Yandex.Market. For more information, see How to list store products in Yandex.Market in Yandex.Market Help for stores.
Registered application with an authorization token. You can get a token manually or using the yandex-market-php-oauth RU library for working with OAuth.
Installation
The library is installed using the Composer package manager.
require __DIR__ . '/vendor/autoload.php';
>">Copied to clipboardUsage example
Let's display a list of all the stores for the Yandex user that the app is registered to.
// Specify authorization data $clientId = '9876543210fedcbaabcdef0123456789' $token = '01234567-89ab-cdef-fedc-ba9876543210'; // Create a client instance with basic methods $baseClient = new \Yandex\Market\Partner\Clients\BaseClient($clientId, $token); // Stores are returned page by page $pageNumber = 0; do < $pageNumber++; // Get a store page with the pageNumber number $campaignsObject = $baseClient->getCampaigns(['page' => $pageNumber,]); // Get a store iterator on the page $campaignsPage = $campaignsObject->getCampaigns(); // Get the number of stores on the page $campaignsCount = $campaignsPage->count(); // Get the fist store $campaign = $campaignsPage->current(); // Print the store ID and URL, and go to the next store for ($i = 0; $i < $campaignsCount; $i++) < echo 'ID: ' . $campaign->getId(); echo 'Domain: ' . $campaign->getDomain(); $campaign = $campaignsPage->next(); > // Get information about pages. The number of pages returned // increases with the page number. The last page will be // reached when the number of pages equal to the current page number is returned $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount(); > while ($pageNumber != $campaignsTotalPages);