Добавлена возможность автоматического возврата платежей для администратора в обработчиках успешной оплаты. Теперь, если пользователь является администратором, система автоматически возвращает средства и отправляет уведомление о статусе возврата. Улучшено логирование ошибок возврата для упрощения отладки.

This commit is contained in:
Vlad 2025-06-01 23:43:32 +03:00
parent 991f1d74b1
commit 097a481026

72
main.py
View File

@ -522,6 +522,30 @@ async def successful_payment_handler(message: Message, db: OracleDatabase = None
plain_report = report.replace("**", "").replace("*", "") plain_report = report.replace("**", "").replace("*", "")
await message.answer(plain_report, reply_markup=builder.as_markup()) await message.answer(plain_report, reply_markup=builder.as_markup())
logging.info("Plain text message sent successfully!") logging.info("Plain text message sent successfully!")
# Проверяем, является ли пользователь администратором и возвращаем звезды
if message.from_user.id == ADMIN_USER_ID:
try:
await message.bot.refund_star_payment(
user_id=message.from_user.id,
telegram_payment_charge_id=message.successful_payment.telegram_payment_charge_id
)
await message.answer(
"🔧 **Admin Refund**\n\n"
f"💰 Payment automatically refunded for admin user.\n"
f"🆔 Transaction ID: {escape_markdown(message.successful_payment.telegram_payment_charge_id)}\n"
" Admin access - no charges applied.",
parse_mode="Markdown"
)
logging.info(f"Admin refund successful for user {message.from_user.id}")
except Exception as refund_error:
logging.error(f"Failed to refund admin payment: {refund_error}")
await message.answer(
"⚠️ **Admin Refund Failed**\n\n"
"Could not automatically refund admin payment. Please contact technical support.\n"
f"🆔 Transaction ID: {escape_markdown(message.successful_payment.telegram_payment_charge_id)}",
parse_mode="Markdown"
)
else: else:
# No detailed information found - refund the payment # No detailed information found - refund the payment
try: try:
@ -689,6 +713,30 @@ async def successful_payment_handler(message: Message, db: OracleDatabase = None
logging.info("Sending photo information message...") logging.info("Sending photo information message...")
await message.answer(photo_message, parse_mode="Markdown") await message.answer(photo_message, parse_mode="Markdown")
logging.info("Photo message sent successfully!") logging.info("Photo message sent successfully!")
# Проверяем, является ли пользователь администратором и возвращаем звезды
if message.from_user.id == ADMIN_USER_ID:
try:
await message.bot.refund_star_payment(
user_id=message.from_user.id,
telegram_payment_charge_id=message.successful_payment.telegram_payment_charge_id
)
await message.answer(
"🔧 **Admin Refund**\n\n"
f"💰 Payment automatically refunded for admin user.\n"
f"🆔 Transaction ID: {escape_markdown(message.successful_payment.telegram_payment_charge_id)}\n"
" Admin access - no charges applied.",
parse_mode="Markdown"
)
logging.info(f"Admin refund successful for user {message.from_user.id}")
except Exception as refund_error:
logging.error(f"Failed to refund admin payment: {refund_error}")
await message.answer(
"⚠️ **Admin Refund Failed**\n\n"
"Could not automatically refund admin payment. Please contact technical support.\n"
f"🆔 Transaction ID: {escape_markdown(message.successful_payment.telegram_payment_charge_id)}",
parse_mode="Markdown"
)
else: else:
# Нет записей - возвращаем деньги # Нет записей - возвращаем деньги
try: try:
@ -737,6 +785,30 @@ async def successful_payment_handler(message: Message, db: OracleDatabase = None
f"✅ Payment successful! Thank you for your purchase.\n" f"✅ Payment successful! Thank you for your purchase.\n"
f"Transaction ID: {message.successful_payment.telegram_payment_charge_id}" f"Transaction ID: {message.successful_payment.telegram_payment_charge_id}"
) )
# Проверяем, является ли пользователь администратором и возвращаем звезды
if message.from_user.id == ADMIN_USER_ID:
try:
await message.bot.refund_star_payment(
user_id=message.from_user.id,
telegram_payment_charge_id=message.successful_payment.telegram_payment_charge_id
)
await message.answer(
"🔧 **Admin Refund**\n\n"
f"💰 Payment automatically refunded for admin user.\n"
f"🆔 Transaction ID: {escape_markdown(message.successful_payment.telegram_payment_charge_id)}\n"
" Admin access - no charges applied.",
parse_mode="Markdown"
)
logging.info(f"Admin refund successful for user {message.from_user.id}")
except Exception as refund_error:
logging.error(f"Failed to refund admin payment: {refund_error}")
await message.answer(
"⚠️ **Admin Refund Failed**\n\n"
"Could not automatically refund admin payment. Please contact technical support.\n"
f"🆔 Transaction ID: {escape_markdown(message.successful_payment.telegram_payment_charge_id)}",
parse_mode="Markdown"
)
async def on_startup(): async def on_startup():