VKirill

7464.ru

Aug 16th, 2024
1,186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <script>
  2. document.addEventListener("DOMContentLoaded", function() {
  3.     // Настройки
  4.     const webhookUrl = 'https://n8n-panel.ru/webhook/d998bdc2-2225-45f4-a490-9b4013de88d7'; // Замените на URL вашего вебхука
  5.     const yandexMetrikaID = '71553979'; // Замените на ID вашего счетчика Яндекс Метрики
  6.  
  7.     // Функция для генерации случайной строки
  8.     function generateRandomString(length) {
  9.         const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  10.         let result = '';
  11.         for (let i = 0; i < length; i++) {
  12.             const randomIndex = Math.floor(Math.random() * characters.length);
  13.             result += characters[randomIndex];
  14.         }
  15.         return result;
  16.     }
  17.  
  18.     // Функция для установки cookie
  19.     function setCookie(name, value, days) {
  20.         let expires = "";
  21.         if (days) {
  22.             const date = new Date();
  23.             date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
  24.             expires = "; expires=" + date.toUTCString();
  25.         }
  26.         let secure = location.protocol === 'https:' ? "; Secure" : "";
  27.         document.cookie = name + "=" + (value || "") + expires + "; path=/" + secure;
  28.     }
  29.  
  30.     // Функция для получения значения cookie по имени
  31.     function getCookie(name) {
  32.         const nameEQ = name + "=";
  33.         const ca = document.cookie.split(';');
  34.         for (let i = 0; i < ca.length; i++) {
  35.             let c = ca[i];
  36.             while (c.charAt(0) === ' ') c = c.substring(1, c.length);
  37.             if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
  38.         }
  39.         return null;
  40.     }
  41.  
  42.     // Функция для проверки и сохранения данных в localStorage, если куки не работают
  43.     function saveData(key, value) {
  44.         try {
  45.             localStorage.setItem(key, value);
  46.         } catch (e) {
  47.             console.error("Не удалось сохранить данные в localStorage:", e);
  48.         }
  49.     }
  50.  
  51.     function loadData(key) {
  52.         try {
  53.             return localStorage.getItem(key);
  54.         } catch (e) {
  55.             console.error("Не удалось загрузить данные из localStorage:", e);
  56.             return null;
  57.         }
  58.     }
  59.  
  60.     // Функция для отправки данных на вебхук
  61.     function sendToWebhook(webhookUrl, data) {
  62.         fetch(webhookUrl, {
  63.             method: 'POST',
  64.             headers: {
  65.                 'Content-Type': 'application/json'
  66.             },
  67.             body: JSON.stringify(data)
  68.         })
  69.         .then(response => response.json())
  70.         .then(data => console.log('Success:', data))
  71.         .catch((error) => console.error('Error:', error));
  72.     }
  73.  
  74.     // Функция для извлечения UTM-параметра из URL
  75.     function getUTMParameter(name) {
  76.         const urlParams = new URLSearchParams(window.location.search);
  77.         return urlParams.get(name);
  78.     }
  79.  
  80.     // Извлекаем UTM-метки из URL и сохраняем в куки
  81.     const utmSource = getUTMParameter("utm_source");
  82.     const utmCampaign = getUTMParameter("utm_campaign");
  83.  
  84.     if (utmSource) {
  85.         setCookie("vechkasov_utm_source", utmSource, 30);
  86.         saveData("vechkasov_utm_source", utmSource);
  87.     }
  88.  
  89.     if (utmCampaign) {
  90.         setCookie("vechkasov_utm_campaign", utmCampaign, 30);
  91.         saveData("vechkasov_utm_campaign", utmCampaign);
  92.     }
  93.  
  94.     // Проверка, если куки не сохраняются, используем localStorage
  95.     const generatedCode = getCookie("vechkasov_wa") || loadData("vechkasov_wa");
  96.     const codeGenerationTime = getCookie("vechkasov_code_time") || loadData("vechkasov_code_time");
  97.     const lastWebhookTime = getCookie("vechkasov_time") || loadData("vechkasov_time");
  98.     let currentTime = Math.floor(Date.now() / 1000);
  99.  
  100.     let shouldSendWebhook = false;
  101.  
  102.     // Проверяем, если код нужно обновить
  103.     if (!generatedCode || !codeGenerationTime || (currentTime - parseInt(codeGenerationTime, 10)) > (7 * 24 * 60 * 60)) {
  104.         // Если кода нет или он старше 7 дней, генерируем новый
  105.         const randomString = generateRandomString(8);
  106.         setCookie("vechkasov_wa", randomString, 30);
  107.         setCookie("vechkasov_code_time", currentTime, 30);
  108.  
  109.         // Сохраняем в localStorage на случай, если куки не работают
  110.         saveData("vechkasov_wa", randomString);
  111.         saveData("vechkasov_code_time", currentTime.toString());
  112.  
  113.         console.log("Generated new string:", randomString);
  114.         shouldSendWebhook = true;
  115.     } else {
  116.         console.log("Using existing string:", generatedCode);
  117.     }
  118.  
  119.     // Проверяем, нужно ли отправить данные на вебхук (если прошло больше недели с последней отправки)
  120.     if (!lastWebhookTime || (currentTime - parseInt(lastWebhookTime, 10)) > (7 * 24 * 60 * 60)) {
  121.         shouldSendWebhook = true;
  122.     }
  123.  
  124.     // Получение clientID через API Яндекс Метрики
  125.     function getYandexMetrikaClientID(callback) {
  126.         if (typeof Ya !== 'undefined' && typeof Ya.Metrika !== 'undefined') {
  127.             var counter = Ya.Metrika.counters[yandexMetrikaID];
  128.             if (counter) {
  129.                 counter.getClientID(function(id) {
  130.                     console.log("ClientID из API Метрики:", id);
  131.                     callback(id);
  132.                 });
  133.             } else {
  134.                 callback(null);
  135.             }
  136.         } else {
  137.             callback(null);
  138.         }
  139.     }
  140.  
  141.     // Проверка clientID через 1 секунду
  142.     setTimeout(function() {
  143.         getYandexMetrikaClientID(function(clientID) {
  144.             if (!clientID) {
  145.                 console.warn("Не удалось получить clientID");
  146.                 clientID = getCookie("_ym_uid") || loadData("_ym_uid");
  147.                 console.log("Используем clientID из куков:", clientID);
  148.             } else {
  149.                 saveData("_ym_uid", clientID);
  150.             }
  151.  
  152.             if (shouldSendWebhook && clientID) {
  153.                 // Готовим данные для отправки на вебхук
  154.                 const webhookData = {
  155.                     clientID: clientID,
  156.                     generatedCode: generatedCode || getCookie("vechkasov_wa"),
  157.                     generationTime: codeGenerationTime || currentTime,
  158.                     utmSource: utmSource || getCookie("vechkasov_utm_source") || loadData("vechkasov_utm_source"),
  159.                     utmCampaign: utmCampaign || getCookie("vechkasov_utm_campaign") || loadData("vechkasov_utm_campaign")
  160.                 };
  161.  
  162.                 console.log("Готовы отправить данные на вебхук:", webhookData);
  163.  
  164.                 // Отправляем данные на вебхук
  165.                 sendToWebhook(webhookUrl, webhookData);
  166.  
  167.                 // Обновляем время последней отправки вебхука
  168.                 setCookie("vechkasov_time", currentTime, 30);
  169.                 saveData("vechkasov_time", currentTime.toString());
  170.             } else if (!clientID) {
  171.                 console.warn("ClientID не получен. Вебхук не отправлен.");
  172.             }
  173.  
  174.             // Функция для замены _NUMBER_ на сгенерированный код в href
  175.             function replaceNumberInHref() {
  176.                 const code = getCookie("vechkasov_wa") || loadData("vechkasov_wa");
  177.                 if (code) {
  178.                     const links = document.querySelectorAll('a[href*="_NUMBER_"]');
  179.                     links.forEach(link => {
  180.                         // Создаем новый URL-объект для безопасного изменения параметров
  181.                         const url = new URL(link.href);
  182.                         const textParam = url.searchParams.get("text");
  183.  
  184.                         if (textParam) {
  185.                             // Заменяем _NUMBER_ на сгенерированный код
  186.                             const newTextParam = textParam.replace("_NUMBER_", code);
  187.                             url.searchParams.set("text", newTextParam);
  188.                             link.href = url.toString();
  189.                             console.log("Ссылка изменена:", link.href);
  190.                         }
  191.                     });
  192.                 } else {
  193.                     console.warn("Код для замены в href не найден.");
  194.                 }
  195.             }
  196.  
  197.             // Вызываем функцию замены _NUMBER_ на сгенерированный код
  198.             replaceNumberInHref();
  199.         });
  200.     }, 1000); // Проверяем через 1 секунду
  201. });
  202.  
  203. </script>
Advertisement
Add Comment
Please, Sign In to add comment