Получаем ссылку на товар на OZON с помощью API на php

Заказчик поставил следующую задачу. Хочу вот мол, чтобы на сайте у товаров была еще ссылка на товар на OZON. Вот только попросил как-то автоматизировать этот процесс.
Получаем ссылку на товар на OZON с помощью API на php

Итак что мы имеем. Сайт с сотней другой товаров. А так же страничка продавца на OZON, которые надо как-то совместить друг с другом. Конечно сначала я просто предложил создать текстовое поле, в которое он, или менеджер, будет прописывать ссылку на товар. Но данный вариант был сразу отвергнут. Попросил именно автоматизировать весь процесс на php.

Что ж, сначала надо было выяснить, а как же нам собственно прописывать ссылки на сам товар на озоне. Поиск по гуглу не дал ровным счетом ничего. Поэтому пришлось разбираться самому. Вот обычный вид ссылки на товар в OZON (ссылка несуществующая, а пробелы можете сами убрать)

https://  www. ozon .ru / product/zhevatelnaya-rezinka-orbit-white-nezhnaya-myata-bez-sahara-10-156445464/

Меня заинтересовал последний список цифр. Логично, что он и был ID товара. Было выяснено, что OZON'у для открытия нужной страницы достаточно только его. Т.е. url теперь мог выглядеть так.

https://  www. ozon .ru / product/156445464/

Т.е. достаточно получить id товаров в системе OZON, их прописать у товаров и по ним уже на карточке товара покажем ссылки на OZON. Что ж, лезем в API и пишем сначала функцию.

function qdi_ozon_post($method, $data=false){
	
	$clientId = '123456';
	$apiKey = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
	
	$ch = curl_init();
	
	$headers = Array(
		'Content-Type: application/json',
		'Accept: application/json',
		'Host: api-seller.ozon.ru',
		'Client-Id: '.$clientId,
		'Api-Key: '.$apiKey,
	);	

	$url = 'https://api-seller.ozon.ru'.$method;

	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_POST, 1);
	
	if( $data ){
		
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	}

	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$answer = curl_exec($ch);
	
	curl_close ($ch);
	
	$answer = json_decode($answer);
	
	return $answer;
}

А к ней уже и сам код.

$list_method = '/v2/product/list';

$list = qdi_ozon_post($list_method);

$ids = Array();

foreach($list->result->items as $item){
	
	$ids[] = $item->product_id;
}

$info_method = '/v2/product/info/list';

$data = Array(
	"filter" => Array(
		"visibility" => "ALL",
	),
	"product_id" => $ids,
);

$data_json = json_encode($data);

$info = qdi_ozon_post($info_method, $data_json);

foreach($info->result->items as $item){
	
	echo $item->offer_id.'='.$item->sku.'<br>';
}

Стоит сказать зачем собственно два запроса и что они делают. Первый запрос "/v2/product/list", мы получаем список товаров, которые содержит артикул (offer_id) и индентификатор товара. Получаем массив идентификаторов товара и обращаемся к другому запросу "/v2/product/info/list", который работает только с заданным фильтром. И по нему уже получаем столь нужный нам sku (Идентификатор товара в системе Ozon)

Имеем на руках артикул и sku озона и можно уже прописывать данное свойство к товарам. Например для Bitrix делаем так.

$arFilter = Array(
	"IBLOCK_ID" => $iblock_id,
	"PROPERTY_CML2_ARTICLE" => $item->offer_id,
);

$product_res = CIBlockElement::GetList(Array(), $arFilter, false, false, Array("ID"));

if( $product = $product_res->GetNext() ){
	
	CIBlockElement::SetPropertyValues($product["ID"], $iblock_id, $item->sku, 'OZON_ID');
}

Все что потом остается, прописать вывод ссылки в карточке товара.