Модуль Сборки модулей TecDock

<?php

// Налаштування керування
$settings = [
'enableCache' => true, // Увімкнення або вимкнення кешування
'connectTimeout' => 50, // Час з'єднання за замовчуванням
'markupPercentage' => 0.35, // Націнка у відсотках (35%)
'roundingOption' => 4, // Опція округлення: 1 - без округлення, 2 - без дробової частини, 3 - до 5, 4 - до 10 (за замовчуванням)
'email' => 'ВАШ ЛОГІН',
'password' => 'ВАШ ПАРОЛЬ',
'uniqueKey' => 'some-unique-key-here',
'token' => '',
'tokenExpiration' => 0
];

if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) {
die();
}

// Ініціалізація масиву цін
$arPrices = [];

// Масив з часом доставки для кожного складу
$deliveryTimes = [
'Львів' => 1, //Склад Львів 1 день
'Kиїв Правий' => 2, //Склад Kиїв Правий 2 дня
'Рівне' => 2, //Склад Рівне 2 дня
'Kиїв Лівий' => 2, //Склад Kиїв Лівий 2 дня
'Одеса' => 2, //Склад Одеса 2 дня
'Миколаїв' => 3, //Склад Миколаїв 3 дня
'Дніпро' => 2, //Склад Дніпро 2 дня
'Харків' => 4 , //Склад Харків 4 дня
'Запоріжжя' => 3, //Склад Запоріжжя 3 дня
'Хмельницький' => 2, //Склад Хмельницький 2 дня
];


// Кешування результатів запитів
$apiCache = [];

// Отримання токену доступу
function getAccessToken($settings) {
// Перевірка чи токен ще дійсний
if ($settings['tokenExpiration'] > time()) {
return $settings['token'];
}

$url = "Для просмотра ссылки Войди или Зарегистрируйся";
$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;
}

// Отримання токену доступу
$accessToken = getAccessToken($settings);

// Основний цикл обробки часток
foreach ($arWsParts as $arPart) {
$article = $arPart['ARTICLE'];

// Перевірка кешу та виконання запиту до API
if ($settings['enableCache'] && isset($apiCache[$article])) {
$curlResult = $apiCache[$article];
} else {
$url = "Для просмотра ссылки Войди или Зарегистрируйся" . urlencode($article);
$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'];
$detailUrl = "Для просмотра ссылки Войди или Зарегистрируйся";
$detailResult = fetchFromApi($detailUrl, $accessToken, $settings['connectTimeout']);

if ($detailResult !== false) {
$detailInfo = json_decode($detailResult, true);
$images = !empty($detailInfo['images']) ? $detailInfo['images'] : [];
$imageSrc = !empty($images) ? $images[0]['fullImagePath'] : '';

$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $detail['article'];
$arPrice["ALT_NAME"] = $detail['title'];
$arPrice["BRAND"] = $detail['brand']['name'];
$arPrice["PRICE"] = $detail['yourPrice']['amount'];
$arPrice["AVAILABLE"] = $detail['quantity'];
$arPrice['IMG_SRC'] = $imageSrc;
$arPrice["CURRENCY"] = $detail['yourPrice']['currency']['code'];
$arPrice["DAY"] = $deliveryTimes[$detail['storage']['name']]; // Отримання часу доставки
$arPrice["STOCK"] = $detail['storage']['name']; // Отримання складу товару
$arPrice["OPTIONS"] = ''; // Опції - поки не вказано
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps, $arPrice);
$arPrices[] = $arPrice;
}
}
}
}
}

//echo '<pre>'; print_r($arPrices); echo '</pre>';
?>
Загалом код працює. У коді потрібно поправити склади і час доставки. Зараз часу щоби це зробити немає, якщо комусь буде потрібно і буду мати час виправлю.
 
Здравствуйте. не работает настройка добавления или удаления производителей авто ну и другие настройки, которые находятся в файлах settings.php права на файлы и папки выставлял не помогает.Может кто-то сталкивался и подскажет как решить. Может кто-то поделится вот та менюшкой файлами subsections. Спасибо
Посмотреть вложение 117897
Посмотрите папку autoparts/media/js/
Возможно, там не хватает какого-то js файла или вот этой папки
 

Вложения

  • jqtree.7z
    84,5 KB · Просмотры: 3
Последнее редактирование:
Снимок экрана 2024-05-16 165835.png

Підкажіть як змінити локалізацію меню каталога?
 
PHP:
<?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>';
?>
Склади поправив додав пошук по аналогам тестуйте будуть якісь баги пишіть постараюсь виправити.
 
Последнее редактирование:
PHP:
<?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>';
?>
Склади поправив додав пошук по аналогам тестуйте будуть якісь баги пишіть постараюсь виправити.
В мене вибиває помилку
Fatal error: Cannot redeclare getAccessToken() (previously declared in F:\OSPanel\domains\localhost\autoparts\tdmcore\webservices\Unique2.php:41) in F:\OSPanel\domains\localhost\autoparts\tdmcore\webservices\Unique2.php on line 255
 
В мене вибиває помилку
Fatal error: Cannot redeclare getAccessToken() (previously declared in F:\OSPanel\domains\localhost\autoparts\tdmcore\webservices\Unique2.php:41) in F:\OSPanel\domains\localhost\autoparts\tdmcore\webservices\Unique2.php on line 255
Скоріш за усе ви скопірували і вставили код повністю із спойрела а під спйрелом 2 варіанти коду UTR.ua.
 
Приветствую!
Подскажет ли кто - как побороть пропадание картинок товаров при отключении показа товаров без цен?
 
Последнее редактирование:
Доброго дня, Підкажіть по цій помилці, яку і куди таблицю добавити?
MySQL Error: Unknown column 'IMG_SRC' in 'field list'

Приветствую!
Подскажет ли кто - как побороть пропадание картинок товаров при отключении показа товаров без цен?
В мене таке не відбувається
 
Назад
Сверху