Примеры запросов к API Яндекс Маркета (добавление товаров, обновление цен и остатков) из PHP.
Для доступа к API понадобится:
$token
– OAuth-токен, подробнее о получении OAuth-токена;$client_id
– Идентификатор приложения;$campaign_id
– Идентификатор кампании, в личном кабинете, в меню слева выберите Настройки → Настройки API и скопируйте из поля Номер кампании число после дефиса.
В данном примере формируется запрос к API Маркета на добавление сразу нескольких товаров из БД магазина:
<?php
// Доступы к API:
$token = 'OAuth-токен';
$client_id = 'Идентификатор приложения';
$campaign_id = 'Идентификатор кампании';
// Получение товаров и БД:
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->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/{$campaign_id}/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);
}
Ответ в случаи успеха:
Array
(
[status] => OK
)
В данном примере цены задаются для нескольких товаров из БД магазина.
Параметр discountBase
следует передавать только в том случае, если у товара есть скидка иначе API вернет ошибку.
<?php
// Доступы к API:
$token = 'OAuth-токен';
$client_id = 'Идентификатор приложения';
$campaign_id = 'Идентификатор кампании';
// Получение товаров и БД:
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->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/{$campaign_id}/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);
}
Ответ в случаи успеха:
Array
(
[status] => OK
)
$warehouse_id
– идентификатор склада, в личном кабинете в разделе Логистика → Склады. Он указан в поле ID склада.
<?php
// Доступы к API:
$token = 'OAuth-токен';
$client_id = 'Идентификатор приложения';
$campaign_id = 'Идентификатор кампании';
$warehouse_id = 'Идентификатор склада';
// Получение товаров и БД:
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->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/{$campaign_id}/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);
}
Ответ в случаи успеха:
Array
(
[status] => OK
)