143 lines
3.7 KiB
JavaScript
143 lines
3.7 KiB
JavaScript
import axios from 'axios';
|
||
|
||
/**
|
||
* Получает user_token из глобального объекта TeleCart
|
||
*/
|
||
function getUserToken() {
|
||
if (typeof window !== 'undefined' && window.TeleCart?.user_token) {
|
||
return window.TeleCart.user_token;
|
||
}
|
||
|
||
// Fallback: пытаемся получить из URL как запасной вариант
|
||
if (typeof window !== 'undefined') {
|
||
const urlParams = new URLSearchParams(window.location.search);
|
||
return urlParams.get('user_token') || '';
|
||
}
|
||
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* Базовый URL для API запросов
|
||
*/
|
||
function getBaseUrl() {
|
||
return '/admin/index.php';
|
||
}
|
||
|
||
/**
|
||
* Создает URL для API запроса
|
||
* @param {string} apiAction - действие API (например, 'configureBotToken')
|
||
* @returns {string} полный URL
|
||
*/
|
||
function buildApiUrl(apiAction) {
|
||
const baseUrl = getBaseUrl();
|
||
const userToken = getUserToken();
|
||
return `${baseUrl}?route=extension/module/tgshop/handle&api_action=${apiAction}&user_token=${userToken}`;
|
||
}
|
||
|
||
/**
|
||
* HTTP клиент для работы с API
|
||
*/
|
||
const httpClient = axios.create({
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
});
|
||
|
||
/**
|
||
* Выполняет POST запрос к API
|
||
* @param {string} apiAction - действие API
|
||
* @param {object} data - данные для отправки
|
||
* @returns {Promise} результат запроса
|
||
*/
|
||
export async function apiPost(apiAction, data = {}) {
|
||
const url = buildApiUrl(apiAction);
|
||
|
||
try {
|
||
const response = await httpClient.post(url, data);
|
||
return {
|
||
success: true,
|
||
data: response.data,
|
||
status: response.status,
|
||
};
|
||
} catch (error) {
|
||
// Обработка ошибок axios
|
||
if (error.response) {
|
||
// Сервер вернул ошибку
|
||
const status = error.response.status;
|
||
const errorData = error.response.data;
|
||
|
||
return {
|
||
success: false,
|
||
error: errorData?.error || error.response.statusText,
|
||
status,
|
||
data: errorData,
|
||
};
|
||
} else if (error.request) {
|
||
// Запрос был отправлен, но ответа не получено
|
||
return {
|
||
success: false,
|
||
error: 'Не удалось получить ответ от сервера',
|
||
status: 0,
|
||
};
|
||
} else {
|
||
// Ошибка при настройке запроса
|
||
return {
|
||
success: false,
|
||
error: error.message || 'Произошла неизвестная ошибка',
|
||
status: 0,
|
||
};
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Выполняет GET запрос к API
|
||
* @param {string} apiAction - действие API
|
||
* @param {object} params - query параметры
|
||
* @returns {Promise} результат запроса
|
||
*/
|
||
export async function apiGet(apiAction, params = {}) {
|
||
const url = buildApiUrl(apiAction);
|
||
|
||
try {
|
||
const response = await httpClient.get(url, { params: params });
|
||
return {
|
||
success: true,
|
||
data: response.data.data,
|
||
status: response.status,
|
||
};
|
||
} catch (error) {
|
||
if (error.response) {
|
||
const status = error.response.status;
|
||
const errorData = error.response.data;
|
||
|
||
return {
|
||
success: false,
|
||
error: errorData?.error || error.response.statusText,
|
||
status,
|
||
data: errorData,
|
||
};
|
||
} else if (error.request) {
|
||
return {
|
||
success: false,
|
||
error: 'Не удалось получить ответ от сервера',
|
||
status: 0,
|
||
};
|
||
} else {
|
||
return {
|
||
success: false,
|
||
error: error.message || 'Произошла неизвестная ошибка',
|
||
status: 0,
|
||
};
|
||
}
|
||
}
|
||
}
|
||
|
||
export default {
|
||
apiPost,
|
||
apiGet,
|
||
getUserToken,
|
||
};
|
||
|