Получаем ссылку на товар на OZON с помощью API на php
Заказчик поставил следующую задачу. Хочу вот мол, чтобы на сайте у товаров была еще ссылка на товар на OZON. Вот только попросил как-то автоматизировать этот процесс.
Итак что мы имеем. Сайт с сотней другой товаров. А так же страничка продавца на 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');
}
Все что потом остается, прописать вывод ссылки в карточке товара.