mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-05-02 02:36:26 +00:00
Update payment_service.py
This commit is contained in:
@@ -272,40 +272,21 @@ class PaymentService:
|
||||
receipt_phone: Optional[str] = None,
|
||||
metadata: Optional[Dict[str, Any]] = None
|
||||
) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
Создает платеж через СБП (Систему быстрых платежей) с использованием YooKassa
|
||||
|
||||
Args:
|
||||
db: Сессия базы данных
|
||||
user_id: ID пользователя
|
||||
amount_kopeks: Сумма в копейках
|
||||
description: Описание платежа
|
||||
receipt_email: Email для чека (опционально)
|
||||
receipt_phone: Телефон для чека (опционально)
|
||||
metadata: Метаданные платежа (опционально)
|
||||
|
||||
Returns:
|
||||
Словарь с информацией о платеже или None в случае ошибки
|
||||
"""
|
||||
|
||||
# Проверяем, инициализирован ли YooKassa сервис
|
||||
if not self.yookassa_service:
|
||||
logger.error("YooKassa сервис не инициализирован")
|
||||
return None
|
||||
|
||||
try:
|
||||
# Конвертируем копейки в рубли
|
||||
amount_rubles = amount_kopeks / 100
|
||||
|
||||
# Подготавливаем метаданные платежа
|
||||
payment_metadata = metadata or {}
|
||||
payment_metadata.update({
|
||||
"user_id": str(user_id),
|
||||
"amount_kopeks": str(amount_kopeks),
|
||||
"type": "balance_topup_sbp" # Тип платежа - через СБП
|
||||
"type": "balance_topup_sbp"
|
||||
})
|
||||
|
||||
# Создаем платеж через YooKassa сервис с указанием метода оплаты СБП
|
||||
yookassa_response = await self.yookassa_service.create_sbp_payment(
|
||||
amount=amount_rubles,
|
||||
currency="RUB",
|
||||
@@ -315,12 +296,10 @@ class PaymentService:
|
||||
receipt_phone=receipt_phone
|
||||
)
|
||||
|
||||
# Проверяем, успешно ли создан платеж
|
||||
if not yookassa_response or yookassa_response.get("error"):
|
||||
logger.error(f"Ошибка создания платежа YooKassa СБП: {yookassa_response}")
|
||||
return None
|
||||
|
||||
# Парсим дату создания платежа
|
||||
yookassa_created_at = None
|
||||
if yookassa_response.get("created_at"):
|
||||
try:
|
||||
@@ -332,16 +311,13 @@ class PaymentService:
|
||||
logger.warning(f"Не удалось парсить created_at: {e}")
|
||||
yookassa_created_at = None
|
||||
|
||||
# Получаем confirmation_token для embedded платежей
|
||||
confirmation_token = None
|
||||
if yookassa_response.get("confirmation"):
|
||||
confirmation_token = yookassa_response["confirmation"].get("confirmation_token")
|
||||
|
||||
# Обновляем метаданные с confirmation_token если он есть
|
||||
if confirmation_token:
|
||||
payment_metadata["confirmation_token"] = confirmation_token
|
||||
|
||||
# Сохраняем информацию о платеже в локальной базе данных
|
||||
local_payment = await create_yookassa_payment(
|
||||
db=db,
|
||||
user_id=user_id,
|
||||
@@ -352,15 +328,13 @@ class PaymentService:
|
||||
status=yookassa_response["status"],
|
||||
confirmation_url=yookassa_response.get("confirmation_url"),
|
||||
metadata_json=payment_metadata,
|
||||
payment_method_type="bank_card", # Для СБП указываем тип bank_card
|
||||
payment_method_type="bank_card",
|
||||
yookassa_created_at=yookassa_created_at,
|
||||
test_mode=yookassa_response.get("test_mode", False)
|
||||
)
|
||||
|
||||
# Логируем успешное создание платежа
|
||||
logger.info(f"Создан платеж YooKassa СБП {yookassa_response['id']} на {amount_rubles}₽ для пользователя {user_id}")
|
||||
|
||||
# Возвращаем информацию о платеже
|
||||
return {
|
||||
"local_payment_id": local_payment.id,
|
||||
"yookassa_payment_id": yookassa_response["id"],
|
||||
@@ -793,10 +767,8 @@ class PaymentService:
|
||||
)
|
||||
|
||||
if not updated_payment.transaction_id:
|
||||
# Получаем сумму в USD из платежа
|
||||
amount_usd = updated_payment.amount_float
|
||||
|
||||
# Конвертируем в рубли по текущему курсу с улучшенной обработкой ошибок
|
||||
try:
|
||||
amount_rubles = await currency_converter.usd_to_rub(amount_usd)
|
||||
amount_kopeks = int(amount_rubles * 100)
|
||||
@@ -808,7 +780,6 @@ class PaymentService:
|
||||
amount_kopeks = int(amount_usd * 100)
|
||||
conversion_rate = 1.0
|
||||
|
||||
# Проверяем корректность конвертированной суммы
|
||||
if amount_kopeks <= 0:
|
||||
logger.error(f"Некорректная сумма после конвертации: {amount_kopeks} копеек для платежа {invoice_id}")
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user