diff --git a/src/services/api.ts b/src/services/api.ts index 938661b..ecc7372 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -89,8 +89,13 @@ const apiService = { throw new Error('Failed to create invoice link'); } - // Предполагаем, что бэкенд возвращает строку с URL инвойса - return await response.text(); + // Парсим ответ как JSON и извлекаем поле invoice_link + 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) { console.error('Error creating invoice link:', error); throw error; diff --git a/src/services/paymentService.ts b/src/services/paymentService.ts index 9ec63eb..3430f2c 100644 --- a/src/services/paymentService.ts +++ b/src/services/paymentService.ts @@ -13,56 +13,37 @@ export const paymentService = { const webApp = window.Telegram.WebApp; const userId = getCurrentUserId(); - // Открываем окно оплаты Telegram - webApp.showPopup({ - title: 'Покупка токенов', - message: `Вы собираетесь купить пакет "${pack.title}" за ${pack.price} Stars (${pack.priceRub} ₽)`, - buttons: [ - { - 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 - ); + try { + // Получаем ссылку на инвойс от бэкенда + const invoiceLink = await apiService.createInvoiceLink( + userId, + pack.price, + pack.tokens + pack.bonusTokens + ); - // Открываем встроенный платеж Telegram - webApp.openInvoice(invoiceLink, async (status: 'paid' | 'cancelled' | 'failed' | 'pending') => { - if (status === 'paid') { - try { - // Получаем обновленную информацию о пользователе - const userData = await apiService.getUserInfo(userId); - - if (onSuccess) { - onSuccess(userData); - } - } catch (error) { - console.error('Ошибка при получении данных пользователя:', error); - - // Даже если не удалось получить данные, вызываем onSuccess - if (onSuccess) { - onSuccess(); - } - } + // Открываем встроенный платеж Telegram без предварительного подтверждения + webApp.openInvoice(invoiceLink, async (status: 'paid' | 'cancelled' | 'failed' | 'pending') => { + if (status === 'paid') { + try { + // Получаем обновленную информацию о пользователе + const userData = await apiService.getUserInfo(userId); + + if (onSuccess) { + onSuccess(userData); } - }); - } catch (error) { - console.error('Ошибка при создании инвойса:', error); - webApp.showAlert('Произошла ошибка при создании платежа. Пожалуйста, попробуйте позже.'); + } catch (error) { + console.error('Ошибка при получении данных пользователя:', error); + + // Даже если не удалось получить данные, вызываем onSuccess + if (onSuccess) { + onSuccess(); + } + } } - } - }); + }); + } catch (error) { + console.error('Ошибка при создании инвойса:', error); + webApp.showAlert('Произошла ошибка при создании платежа. Пожалуйста, попробуйте позже.'); + } } };