Работа с Ozon Seller API в PHP

Примеры запросов к Seller API для добавление товаров, обновление остатков из PHP.

1

Для доступа к API понадобится «Client Id» и «​API key», узнать их можно в настройках, в разделе «API ключи»:

2

Документация

Чтобы добавить товар нужно передать идентификатор категории озона, узнать их можно в xlsx-файле на странице https://seller.ozon.ru/app/products/import/file (кнопка «Скачать категории»).

Так же по id категории загружаются характеристики и заполняются значениями. В каждой категории свой набор характеристик, некоторые из них обязательные для заполнения.

<?php
// Доступы к API:
$client_id = 'Client Id';
$token = 'API key';

// Получение товаров и БД:
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `ozon` = 1 LIMIT 100");
$sth->execute();
$prods = $sth->fetchAll(PDO::FETCH_ASSOC);
 
if (!empty($prods)) {
	$items = array();
	foreach ($prods as $prod) {
		// Получаем характеристики категории
		$data = array(
			'attribute_type' => 'ALL',
			'category_id'    => array($prod['ozon_category']),
			'language'       => 'RU'
		);
	
		$ch = curl_init("https://api-seller.ozon.ru/v3/category/attribute");
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
			'Api-Key:' . $token,
			'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);
		
		// Заполнение характеристик
		$attributes = array();
		$res = json_decode($res, true);
		foreach ($res['result'][0]['attributes'] as $attr) {
			// Бренд
			if ($prodres['name'] == 'Бренд') {
				$attributes[] = array(
					'complex_id' => 0,
					'id' => $attr['id'],
					'values' => array(
						array(
							'value' => $prod['name']
						)
					)
				);
			}
			
			// Описание товара
			if ($prodres['name'] == 'Аннотация') {
				$attributes[] = array(
					'id' => $attr['id'],
					'values' => array(
						array(
							'dictionary_value_id' => 0,
							'value' => strip_tags($prod['text'])
						)
					)
				);
			}

			if ($prodres['name'] == 'Артикул') {
				$attributes[] = array(
					'id' => $attr['id'],
					'values' => array(
						array(
							'dictionary_value_id' => 0,
							'value' => $prod['sku']
						)
					)
				);
			}
		}

		$item = array(
			'attributes'           => $attributes,
			'barcode'              => $prod['barcode'],
			'category_id'          => $prod['ozon_category'],
			//'color_image'        => '',
			//'complex_attributes' => array(),
			'currency_code'        => 'RUB',
			'depth'                => $prod['depth'],
			'dimension_unit'       => 'mm',
			'height'               => $prod['height'],
			'images'               => array(
				'https://example.com/img/' . $prod['img_1'],
				'https://example.com/img/' . $prod['img_2'],
			),
			//'images360'          => array(),
			'name'                 => $prod['name'],
			'offer_id'             => $prod['id'],
			//'pdf_list'           => array(),
			//'premium_pric'       => '900',
			'price'                => $prod['price'],
			'old_price'            => $prod['price_old'];
			//'primary_image'      => '',
			'vat'                  => '0',
			'weight'               => $prod['weight'],
			'weight_unit'          => 'g',
			'width'                => $prod['width']
		);

		$items[] = $item;
	}

	$data = array(
		'items' => $items
	);
	
	$ch = curl_init('https://api-seller.ozon.ru/v2/product/import');
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		'Api-Key:' . $token,
		'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);
}
PHP

Ответ в случаи успеха:

Array
(
    [result] => Array(
		[task_id] => 123456789
	)
)

При обновлении товара по API, все правки в товаре сделанные в личном кабинете Ozon будут затерты.

3

Документация

В данном примере цены задаются для нескольких товаров из БД магазина.

<?php
// Доступы к API:
$client_id = 'Client Id';
$token = 'API key';

// Получение товаров и БД:
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `ozon` = 1 LIMIT 100");
$sth->execute();
$prods = $sth->fetchAll(PDO::FETCH_ASSOC);
 
if (!empty($prods)) {
	$items = array();
	foreach ($prods as $prod) {
		$items[] =  array(
			'auto_action_enabled' => 'UNKNOWN',
			'currency_code' => 'RUB',
			'min_price' => '0',
			'offer_id' => $prod['id'],
			'old_price' => 0,
			'price' => strval($prod['price']),
		);
	}

	$data = array(
		'prices' => $items
	);
	
	$ch = curl_init('https://api-seller.ozon.ru/v1/product/import/prices');
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		'Api-Key:' . $token,
		'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);	
}
PHP
4

Документация

<?php
// Доступы к API:
$client_id = 'Client Id';
$token = 'API key';

// Получение товаров и БД:
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `ozon` = 1 LIMIT 100");
$sth->execute();
$prods = $sth->fetchAll(PDO::FETCH_ASSOC);

if (!empty($prods)) {
	$items = array();
	foreach ($prods as $prod) {
		$items[] =  array(
			'offer_id' => $prod['id'],
			'stock'    => $prod['count'],
		);
	}

	$data = array(
		'stocks' => $items
	);
	
	$ch = curl_init('https://api-seller.ozon.ru/v1/product/import/stocks');
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		'Api-Key:' . $token,
		'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);	
}
PHP
15.11.2022, обновлено 13.12.2022
19205

Комментарии

, чтобы добавить комментарий.

Другие публикации

Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55972
+20
Работа с API Яндекс.Маркета для модели FBS в PHP
Примеры запросов к API Яндекс.Маркета (добавление товаров, обновление цен и остатков) из PHP.
5990
+5
Яндекс.Доставка работа с API в PHP
Примеры работы с API Яндекс.Доставки (для заказа перевозки грузов корпоративным клиентам).
8716
+5
Запись в лог-файл в PHP
Несколько вариантов как быстро организовать запись данных в лог-файл.
80973
+12
Чтение XML файла Яндекс Маркета в PHP
Если требуется сделать импорт или обновление товаров по XML файлу Яндекс Маркета, можно применить расширении PHP...
14352
+5
Прием платежей на сайте через Юкассу
В данной статье описан процесс оплаты через сервис ЮKassa с помощью прямых запросов к API через PHP cURL.
23942
+8