// Конфигурация API AmoCRM const AMO_CRM_DOMAIN = 'balilook.amocrm.ru'; // Замените на свой домен AmoCRM const CLIENT_ID = '1f4ab213-435b-4396-ae98-c70b840cecea'; // Твой ID интеграции const CLIENT_SECRET = 'i07JXLCyHLBfCymOvLROGdvb6wWSME4T...'; // Твой секретный ключ const REFRESH_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm...'; // Долгосрочный токен const REDIRECT_URI = 'https://balilook.com/callback'; // Должно совпадать с AmoCRM let ACCESS_TOKEN = ''; // Будем обновлять автоматически const PARTNER_FIELD_ID = 953237; // ID пользовательского поля "Партнёр" // Функция для получения нового access_token async function getAccessToken() { const url = `https://${AMO_CRM_DOMAIN}/oauth2/access_token`; const payload = { client_id: CLIENT_ID, client_secret: CLIENT_SECRET, grant_type: "refresh_token", refresh_token: REFRESH_TOKEN, redirect_uri: REDIRECT_URI }; try { const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); if (!response.ok) { throw new Error(`Ошибка обновления токена: ${response.statusText}`); } const data = await response.json(); ACCESS_TOKEN = data.access_token; console.log("✅ Новый токен получен:", ACCESS_TOKEN); return ACCESS_TOKEN; } catch (error) { console.error("❌ Ошибка при получении токена:", error); return null; } } // Функция для получения ID партнёра function getPartnerIdFromSession() { const idFromStorage = localStorage.getItem('partner_id'); const idFromURL = getParameterByName('partner_id'); console.log("ID из localStorage:", idFromStorage); console.log("ID из URL:", idFromURL); return idFromStorage || idFromURL || null; } function getParameterByName(name, url = window.location.href) { name = name.replace(/[\[\]]/g, "\\$&"); const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } // Функция для получения сделок партнёра async function fetchPartnerDeals(partnerId) { if (!ACCESS_TOKEN) { await getAccessToken(); // Получаем новый токен } console.log("Запрос сделок для партнёра:", partnerId); const url = `https://${AMO_CRM_DOMAIN}/api/v4/leads?filter[custom_fields_values][field_id]=${PARTNER_FIELD_ID}&filter[custom_fields_values][value]=${partnerId}`; try { const response = await fetch(url, { method: "GET", headers: { "Authorization": `Bearer ${ACCESS_TOKEN}`, "Content-Type": "application/json" } }); if (!response.ok) { throw new Error(`Ошибка запроса: ${response.statusText}`); } const data = await response.json(); console.log("✅ Полученные сделки:", data); return data._embedded?.leads || []; } catch (error) { console.error("❌ Ошибка при получении сделок:", error); return []; } } // Функция для отображения сделок на странице async function displayDeals() { const partnerId = getPartnerIdFromSession(); if (!partnerId) { document.getElementById('dealsContainer').innerHTML = '

Ошибка: ID партнёра не найден

'; return; } const deals = await fetchPartnerDeals(partnerId); const dealsContainer = document.getElementById('dealsContainer'); dealsContainer.innerHTML = ''; if (deals.length === 0) { dealsContainer.innerHTML = '

Сделки не найдены.

'; return; } deals.forEach(deal => { const dealElement = document.createElement('div'); dealElement.classList.add('deal-item'); dealElement.innerHTML = `

Сделка: ${deal.name}

Статус: ${deal.status_id}

Сумма: ${deal.price} руб.

`; dealsContainer.appendChild(dealElement); }); } // Функция для загрузки сделок при открытии страницы document.addEventListener("DOMContentLoaded", async () => { await getAccessToken(); displayDeals(); });