<?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>';
?>