// Конфигурация 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();
});