fix: исправлена интеграция платежей через Telegram Stars API
- справлена обработка ответа от эндпоинта /create-invoice-link
- обавлена поддержка JSON-формата ответа с полем invoice_link
- брано промежуточное подтверждение покупки для улучшения UX
- обавлено получение информации о пользователе через /users/{user_id}
- бновлен интерфейс профиля для отображения актуальных данных после оплаты
This commit is contained in:
parent
92424f6902
commit
cde032fd57
@ -89,8 +89,13 @@ const apiService = {
|
|||||||
throw new Error('Failed to create invoice link');
|
throw new Error('Failed to create invoice link');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Предполагаем, что бэкенд возвращает строку с URL инвойса
|
// Парсим ответ как JSON и извлекаем поле invoice_link
|
||||||
return await response.text();
|
const data = await response.json();
|
||||||
|
if (!data.invoice_link) {
|
||||||
|
throw new Error('Invalid response format: missing invoice_link field');
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.invoice_link;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error creating invoice link:', error);
|
console.error('Error creating invoice link:', error);
|
||||||
throw error;
|
throw error;
|
||||||
|
|||||||
@ -13,56 +13,37 @@ export const paymentService = {
|
|||||||
const webApp = window.Telegram.WebApp;
|
const webApp = window.Telegram.WebApp;
|
||||||
const userId = getCurrentUserId();
|
const userId = getCurrentUserId();
|
||||||
|
|
||||||
// Открываем окно оплаты Telegram
|
try {
|
||||||
webApp.showPopup({
|
// Получаем ссылку на инвойс от бэкенда
|
||||||
title: 'Покупка токенов',
|
const invoiceLink = await apiService.createInvoiceLink(
|
||||||
message: `Вы собираетесь купить пакет "${pack.title}" за ${pack.price} Stars (${pack.priceRub} ₽)`,
|
userId,
|
||||||
buttons: [
|
pack.price,
|
||||||
{
|
pack.tokens + pack.bonusTokens
|
||||||
type: 'ok',
|
);
|
||||||
text: 'Купить',
|
|
||||||
id: 'buy'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'cancel',
|
|
||||||
text: 'Отмена'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}, async (buttonId: string) => {
|
|
||||||
if (buttonId === 'buy') {
|
|
||||||
try {
|
|
||||||
// Получаем ссылку на инвойс от бэкенда
|
|
||||||
const invoiceLink = await apiService.createInvoiceLink(
|
|
||||||
userId,
|
|
||||||
pack.price,
|
|
||||||
pack.tokens + pack.bonusTokens
|
|
||||||
);
|
|
||||||
|
|
||||||
// Открываем встроенный платеж Telegram
|
// Открываем встроенный платеж Telegram без предварительного подтверждения
|
||||||
webApp.openInvoice(invoiceLink, async (status: 'paid' | 'cancelled' | 'failed' | 'pending') => {
|
webApp.openInvoice(invoiceLink, async (status: 'paid' | 'cancelled' | 'failed' | 'pending') => {
|
||||||
if (status === 'paid') {
|
if (status === 'paid') {
|
||||||
try {
|
try {
|
||||||
// Получаем обновленную информацию о пользователе
|
// Получаем обновленную информацию о пользователе
|
||||||
const userData = await apiService.getUserInfo(userId);
|
const userData = await apiService.getUserInfo(userId);
|
||||||
|
|
||||||
if (onSuccess) {
|
if (onSuccess) {
|
||||||
onSuccess(userData);
|
onSuccess(userData);
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Ошибка при получении данных пользователя:', error);
|
|
||||||
|
|
||||||
// Даже если не удалось получить данные, вызываем onSuccess
|
|
||||||
if (onSuccess) {
|
|
||||||
onSuccess();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
} catch (error) {
|
||||||
} catch (error) {
|
console.error('Ошибка при получении данных пользователя:', error);
|
||||||
console.error('Ошибка при создании инвойса:', error);
|
|
||||||
webApp.showAlert('Произошла ошибка при создании платежа. Пожалуйста, попробуйте позже.');
|
// Даже если не удалось получить данные, вызываем onSuccess
|
||||||
|
if (onSuccess) {
|
||||||
|
onSuccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
} catch (error) {
|
||||||
|
console.error('Ошибка при создании инвойса:', error);
|
||||||
|
webApp.showAlert('Произошла ошибка при создании платежа. Пожалуйста, попробуйте позже.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user