<?php
// Налаштування керування
$settings = [
'enableCache' => true, // Увімкнення або вимкнення кешування
'connectTimeout' => 50, // Час з'єднання за замовчуванням
'markupPercentage' => 0.35, // Націнка у відсотках (35%)
'roundingOption' => 4, // Опція округлення: 1 - без округлення, 2 - без дробової частини, 3 - до 5, 4 - до 10 (за замовчуванням)
'executionTimes' => [
'Львів' => 1, //Склад Львів
'Kиїв Правий' => 2, //Склад Kиїв Правий
'Рівне' => 2, //Склад Рівне
'Kиїв Лівий' => 2, //Склад Kиїв Лівий
'Одеса' => 2, //Склад Одеса
'Миколаїв' => 2, //Склад Миколаїв
'Дніпро' => 2, //Склад Дніпро
'Харків' => 2, //Склад Харків
'Запоріжжя' => 2, //Склад Запоріжжя
'Хмельницький' => 2, //Склад Хмельницький
'Під замовлення (2-4 дні)' => 5, //Склад Під замовлення (2-4 дні)
], // Час доставки за іменем складу
'defaultExecutionTime' => 30, // Час доставки за замовчуванням
'email' => 'Ваш Логін',
'password' => 'Ваш Пароль',
'uniqueKey' => 'some-unique-key-here',
'token' => '',
'tokenExpiration' => 0
];
if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) {
die();
}
// Ініціалізація масиву цін
$arPrices = [];
// Кешування результатів запитів
$apiCache = [];
// Отримання токену доступу
function getAccessToken(&$settings) {
// Перевірка чи токен ще дійсний
if ($settings['tokenExpiration'] > time()) {
return $settings['token'];
}
$url = "https://order24-api.utr.ua/api/login_check";
$data = json_encode([
"email" => $settings['email'],
"password" => $settings['password'],
"browser_fingerprint" => md5($settings['uniqueKey'])
]);
$headers = ["Content-Type: application/json"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] == 200) {
$responseData = json_decode($response, true);
$settings['token'] = $responseData['token'];
$settings['tokenExpiration'] = strtotime($responseData['expires_at']);
return $settings['token'];
} else {
die("Не вдалося отримати токен доступу: HTTP Error {$info['http_code']}");
}
}
// Виконання запитів до API
function fetchFromApi($url, $accessToken, $connectTimeout) {
$headers = ["Authorization: Bearer $accessToken"];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HEADER => 0,
CURLOPT_ENCODING => 'utf-8',
CURLOPT_CONNECTTIMEOUT => $connectTimeout
]);
$curlResult = curl_exec($ch);
curl_close($ch);
return $curlResult;
}
// Функція для виправлення URL зображення
function fixImageUrl($url) {
return str_replace("//images", "/images", $url);
}
// Отримання токену доступу
$accessToken = getAccessToken($settings);
// Основний цикл обробки часток
foreach ($arWsParts as $arPart) {
$article = $arPart['ARTICLE'];
// Перевірка кешу та виконання запиту до API
if ($settings['enableCache'] && isset($apiCache[$article])) {
$curlResult = $apiCache[$article];
} else {
$url = "https://order24-api.utr.ua/api/search/" . urlencode($article) . "?info=1";
$curlResult = fetchFromApi($url, $accessToken, $settings['connectTimeout']);
if ($settings['enableCache']) {
$apiCache[$article] = $curlResult;
}
}
// Обробка результатів запиту
if ($curlResult !== false) {
$curlResult = json_decode($curlResult, true);
if (!empty($curlResult['details'])) {
foreach ($curlResult['details'] as $detail) {
$detailId = $detail['id'];
$brandName = $detail['brand']['name'];
$detailUrl = "https://order24-api.utr.ua/api/detail/$detailId";
$detailResult = fetchFromApi($detailUrl, $accessToken, $settings['connectTimeout']);
if ($detailResult !== false) {
$detailInfo = json_decode($detailResult, true);
$images = !empty($detailInfo['images']) ? $detailInfo['images'] : [];
$imageSrc = !empty($images) ? fixImageUrl($images[0]['fullImagePath']) : '';
foreach ($detailInfo['remains'] as $remain) {
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $detail['article'];
$arPrice["ALT_NAME"] = $detail['title'];
$arPrice["BRAND"] = $detail['brand']['name'];
$arPrice["PRICE"] = $detail['yourPrice']['amount'];
$arPrice["AVAILABLE"] = $remain['remain'];
$arPrice['IMG_SRC'] = $imageSrc;
$arPrice["CURRENCY"] = $detail['yourPrice']['currency']['code'];
$arPrice["DAY"] = $settings['executionTimes'][$remain['storage']['name']] ?? $settings['defaultExecutionTime'];
$arPrice["STOCK"] = $remain['storage']['name'];
$arPrice["OPTIONS"] = ''; // Опції - поки не вказано
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps, $arPrice);
$arPrices[] = $arPrice;
}
// Пошук аналогів
$analogsUrl = "https://order24-api.utr.ua/api/analogs/" . urlencode($brandName) . "/" . urlencode($article);
$analogsResult = fetchFromApi($analogsUrl, $accessToken, $settings['connectTimeout']);
if ($analogsResult !== false) {
$analogs = json_decode($analogsResult, true);
foreach ($analogs as $analog) {
foreach ($analog['remains'] as $analogRemain) {
$analogPrice = TDMPriceArray($arPart);
$analogPrice["ARTICLE"] = $analog['article'];
$analogPrice["ALT_NAME"] = $analog['title'];
$analogPrice["BRAND"] = $analog['brand']['name'];
$analogPrice["PRICE"] = $analog['yourPrice']['amount'];
$analogPrice["AVAILABLE"] = $analogRemain['remain'];
$analogPrice['IMG_SRC'] = $imageSrc; // Використовуємо одне й те ж зображення
$analogPrice["CURRENCY"] = $analog['yourPrice']['currency']['code'];
$analogPrice["DAY"] = $settings['executionTimes'][$analogRemain['storage']['name']] ?? $settings['defaultExecutionTime'];
$analogPrice["STOCK"] = $analogRemain['storage']['name'];
$analogPrice["OPTIONS"] = ''; // Опції - поки не вказано
$analogOps = Array();
$analogPrice["OPTIONS"] = TDMOptionsImplode($analogOps, $analogPrice);
$arPrices[] = $analogPrice;
}
}
}
}
}
}
}
}
echo '<pre>'; print_r($arPrices); echo '</pre>';
?>
або
<?php
// Налаштування керування
$settings = [
'enableCache' => true, // Увімкнення або вимкнення кешування
'connectTimeout' => 50, // Час з'єднання за замовчуванням
'markupPercentage' => 0.35, // Націнка у відсотках (35%)
'roundingOption' => 4, // Опція округлення: 1 - без округлення, 2 - без дробової частини, 3 - до 5, 4 - до 10 (за замовчуванням)
'executionTimes' => [
'Львів' => 1, //Склад Львів
'Kиїв Правий' => 2, //Склад Kиїв Правий
'Рівне' => 2, //Склад Рівне
'Kиїв Лівий' => 2, //Склад Kиїв Лівий
'Одеса' => 2, //Склад Одеса
'Миколаїв' => 2, //Склад Миколаїв
'Дніпро' => 2, //Склад Дніпро
'Харків' => 2, //Склад Харків
'Запоріжжя' => 2, //Склад Запоріжжя
'Хмельницький' => 2, //Склад Хмельницький
'Під замовлення (2-4 дні)' => 5, //Склад Під замовлення (2-4 дні)
], // Час доставки за іменем складу
'defaultExecutionTime' => 30, // Час доставки за замовчуванням
'email' => ' Ваш Логін ',
'password' => ' Ваш Пароль ',
'uniqueKey' => 'some-unique-key-here',
'token' => '',
'tokenExpiration' => 0
];
if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) {
die();
}
// Ініціалізація масиву цін
$arPrices = [];
// Кешування результатів запитів
$apiCache = [];
// Отримання токену доступу
function getAccessToken(&$settings) {
// Перевірка чи токен ще дійсний
if ($settings['tokenExpiration'] > time()) {
return $settings['token'];
}
$url = "https://order24-api.utr.ua/api/login_check";
$data = json_encode([
"email" => $settings['email'],
"password" => $settings['password'],
"browser_fingerprint" => md5($settings['uniqueKey'])
]);
$headers = ["Content-Type: application/json"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] == 200) {
$responseData = json_decode($response, true);
$settings['token'] = $responseData['token'];
$settings['tokenExpiration'] = strtotime($responseData['expires_at']);
return $settings['token'];
} else {
die("Не вдалося отримати токен доступу: HTTP Error {$info['http_code']}");
}
}
// Виконання запитів до API
function fetchFromApi($url, $accessToken, $connectTimeout) {
$headers = ["Authorization: Bearer $accessToken"];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HEADER => 0,
CURLOPT_ENCODING => 'utf-8',
CURLOPT_CONNECTTIMEOUT => $connectTimeout
]);
$curlResult = curl_exec($ch);
curl_close($ch);
return $curlResult;
}
// Функція для виправлення URL зображення
function fixImageUrl($url) {
return str_replace("//images", "/images", $url);
}
// Отримання токену доступу
$accessToken = getAccessToken($settings);
// Основний цикл обробки часток
foreach ($arWsParts as $arPart) {
$article = $arPart['ARTICLE'];
// Перевірка кешу та виконання запиту до API
if ($settings['enableCache'] && isset($apiCache[$article])) {
$curlResult = $apiCache[$article];
} else {
$url = "https://order24-api.utr.ua/api/search/" . urlencode($article) . "?info=1";
$curlResult = fetchFromApi($url, $accessToken, $settings['connectTimeout']);
if ($settings['enableCache']) {
$apiCache[$article] = $curlResult;
}
}
// Обробка результатів запиту
if ($curlResult !== false) {
$curlResult = json_decode($curlResult, true);
if (!empty($curlResult['details'])) {
foreach ($curlResult['details'] as $detail) {
$detailId = $detail['id'];
$brandName = $detail['brand']['name'];
$detailUrl = "https://order24-api.utr.ua/api/detail/$detailId";
$detailResult = fetchFromApi($detailUrl, $accessToken, $settings['connectTimeout']);
if ($detailResult !== false) {
$detailInfo = json_decode($detailResult, true);
$images = !empty($detailInfo['images']) ? $detailInfo['images'] : [];
$imageSrc = !empty($images) ? fixImageUrl($images[0]['fullImagePath']) : '';
foreach ($detailInfo['remains'] as $remain) {
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $detail['article'];
$arPrice["ALT_NAME"] = $detail['title'];
$arPrice["BRAND"] = $detail['brand']['name'];
$arPrice["PRICE"] = $detail['yourPrice']['amount'];
$arPrice["AVAILABLE"] = $remain['remain'];
$arPrice['IMG_SRC'] = $imageSrc;
$arPrice["CURRENCY"] = $detail['yourPrice']['currency']['code'];
$arPrice["DAY"] = $settings['executionTimes'][$remain['storage']['name']] ?? $settings['defaultExecutionTime'];
$arPrice["STOCK"] = $remain['storage']['name'];
$arPrice["OPTIONS"] = ''; // Опції - поки не вказано
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps, $arPrice);
$arPrices[] = $arPrice;
}
// Пошук аналогів
$analogsUrl = "https://order24-api.utr.ua/api/analogs/" . urlencode($brandName) . "/" . urlencode($article);
$analogsResult = fetchFromApi($analogsUrl, $accessToken, $settings['connectTimeout']);
if ($analogsResult !== false) {
$analogs = json_decode($analogsResult, true);
foreach ($analogs as $analog) {
foreach ($analog['remains'] as $analogRemain) {
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $analog['article'];
$arPrice["ALT_NAME"] = $analog['title'];
$arPrice["BRAND"] = $analog['brand']['name'];
$arPrice["PRICE"] = $analog['yourPrice']['amount'];
$arPrice["AVAILABLE"] = $analogRemain['remain'];
// $arPrice['IMG_SRC'] = $imageSrc; // Використовуємо одне й те ж зображення
$arPrice["CURRENCY"] = $analog['yourPrice']['currency']['code'];
$arPrice["DAY"] = $settings['executionTimes'][$analogRemain['storage']['name']] ?? $settings['defaultExecutionTime'];
$arPrice["STOCK"] = $analogRemain['storage']['name'];
$arPrice["OPTIONS"] = ''; // Опції - поки не вказано
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps, $arPrice);
$arPrices[] = $arPrice;
}
}
}
}
}
}
}
}
echo '<pre>'; print_r($arPrices); echo '</pre>';
?>