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

Снимок экрана 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'

Приветствую!
Подскажет ли кто - как побороть пропадание картинок товаров при отключении показа товаров без цен?
В мене таке не відбувається
 
Доброго дня, Підкажіть по цій помилці, яку і куди таблицю добавити?
MySQL Error: Unknown column 'IMG_SRC' in 'field list'
Потрібно $arPrice['IMG_SRC'] = $imageSrc;
Замінити на $arOps['IMG_SRC'] = $imageSrc;
($imageSrc; берете те яке зазначене у ваших файлах)
Таблиця IMG_SRC в базі вже є, вона відноситься до опцій (arOps), а arPrice ні, тому і виходить помилка.

До речі з пропаданням фото теж повинно допомогти...
 
Последнее редактирование:
До речі з пропаданням фото теж повинно допомогти...
Це ж по відношенню до вебсервісу.
Фото у мене зникають при ввімкнені опції "не показывать товары без цен". Зникають як рідні фото текдок, так і завантажені в uploads/artmedia. Але це вібувається тільки при виводі результатів пошуку по номеру.
Також наприклад, при відключенні цієї опціі виводить лого виробника (ніби фото немає), але при заході в картку товара - показує і рідне фото текдок і характеристики товара.
 
Для просмотра ссылки Войди или Зарегистрируйся спробуйте цей, але там теж трабли трохи є з відображенням фото
 
Последнее редактирование:
Назад
Сверху