Delete message about payment from Kassa AI

Delete message about payment from Kassa AI after success payment, if the message is available
This commit is contained in:
Boris Kovalskii
2025-07-24 13:22:45 +10:00
committed by GitHub
parent 3647e52475
commit b32a7ac20b
3 changed files with 44 additions and 7 deletions
+17 -5
View File
@@ -204,21 +204,27 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext):
return
await state.update_data(amount=amount)
payment_url = await generate_kassai_payment_link(amount, message.chat.id, method)
payment_url = await generate_kassai_payment_link(amount, callback_query.message.chat.id, method)
confirm_keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text=PAY_2, url=payment_url)],
[InlineKeyboardButton(text=BACK, callback_data="pay_kassai")],
[InlineKeyboardButton(text=BACK, callback_data="balance")],
]
)
await edit_or_send_message(
payment_message = await edit_or_send_message(
target_message=message,
text=KASSAI_PAYMENT_MESSAGE.format(amount=amount),
reply_markup=confirm_keyboard,
force_text=True,
)
# Сохраняем message_id для последующего удаления
await state.update_data(
payment_message_id=payment_message.message_id if hasattr(payment_message, 'message_id') else message.message_id,
payment_chat_id=message.chat.id
)
await state.set_state(ReplenishBalanceKassaiState.waiting_for_payment_confirmation)
@@ -258,16 +264,22 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
confirm_keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text=PAY_2, url=payment_url)],
[InlineKeyboardButton(text=BACK, callback_data="pay_kassai")],
[InlineKeyboardButton(text=BACK, callback_data="balance")],
]
)
await edit_or_send_message(
payment_message = await edit_or_send_message(
target_message=callback_query.message,
text=KASSAI_PAYMENT_MESSAGE.format(amount=amount),
reply_markup=confirm_keyboard,
force_text=True,
)
# Сохраняем message_id для последующего удаления
await state.update_data(
payment_message_id=payment_message.message_id if hasattr(payment_message, 'message_id') else callback_query.message.message_id,
payment_chat_id=callback_query.message.chat.id
)
await state.set_state(ReplenishBalanceKassaiState.waiting_for_payment_confirmation)
+2 -2
View File
@@ -194,7 +194,7 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext):
confirm_keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text=PAY_2, url=payment_url)],
[InlineKeyboardButton(text=BACK, callback_data="pay_wata")],
[InlineKeyboardButton(text=BACK, callback_data="balance")],
]
)
await edit_or_send_message(
@@ -237,7 +237,7 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
confirm_keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text=PAY_2, url=payment_url)],
[InlineKeyboardButton(text=BACK, callback_data="pay_wata")],
[InlineKeyboardButton(text=BACK, callback_data="balance")],
]
)
await edit_or_send_message(
+25
View File
@@ -6,7 +6,9 @@ from handlers.payments.utils import send_payment_success_notification
from handlers.payments.kassai import verify_kassai_signature
from config import KASSAI_SECRET_KEY, KASSAI_SHOP_ID
from logger import logger
import bot
# Хранилище обработанных платежей для предотвращения дублирования
processed_payments = set()
@@ -58,6 +60,29 @@ async def kassai_payment_webhook(request: web.Request):
await send_payment_success_notification(tg_id, amount_float, session)
await add_payment(session, tg_id, amount_float, "kassai")
# Попытка удалить сообщение с кнопкой оплаты
try:
from aiogram.fsm.context import FSMContext
from aiogram.fsm.storage.base import StorageKey
# Получаем данные из FSM state пользователя
storage_key = StorageKey(bot_id=bot.bot.id, chat_id=tg_id, user_id=tg_id)
state_data = await bot.dp.storage.get_data(storage_key)
if state_data and 'payment_message_id' in state_data:
payment_message_id = state_data['payment_message_id']
try:
await bot.bot.delete_message(chat_id=tg_id, message_id=payment_message_id)
logger.info(f"Payment message deleted for user {tg_id}")
except Exception as e:
logger.warning(f"Could not delete payment message for user {tg_id}: {e}")
# Очищаем state после успешной оплаты
await bot.dp.storage.set_state(storage_key, None)
await bot.dp.storage.set_data(storage_key, {})
except Exception as e:
logger.warning(f"Error handling payment message deletion: {e}")
if merchant_order_id:
processed_payments.add(merchant_order_id)