diff --git a/app/cabinet/routes/balance.py b/app/cabinet/routes/balance.py index fe098866..513c84cc 100644 --- a/app/cabinet/routes/balance.py +++ b/app/cabinet/routes/balance.py @@ -349,7 +349,9 @@ async def create_topup( amount_rubles = request.amount_kopeks / 100 payment_url = None payment_id = None - cabinet_return_url = f'{settings.CABINET_URL}/balance/top-up/result?method={request.payment_method}' + cabinet_return_url = f'{settings.CABINET_URL.rstrip("/")}/balance/top-up/result?method={request.payment_method}' + cabinet_success_url = f'{cabinet_return_url}&status=success' + cabinet_failed_url = f'{cabinet_return_url}&status=failed' try: if request.payment_method == 'yookassa': @@ -493,7 +495,8 @@ async def create_topup( ), language=getattr(user, 'language', None) or settings.DEFAULT_LANGUAGE, payment_method_code=method_code, - return_url=cabinet_return_url, + return_url=cabinet_success_url, + failed_url=cabinet_failed_url, ) if result and result.get('redirect_url'): @@ -520,6 +523,7 @@ async def create_topup( description=settings.get_balance_payment_description(request.amount_kopeks), language=getattr(user, 'language', None) or settings.DEFAULT_LANGUAGE, return_url=cabinet_return_url, + success_url=cabinet_success_url, ) if result and result.get('payment_url'): @@ -617,7 +621,8 @@ async def create_topup( amount_kopeks=request.amount_kopeks, description=settings.get_balance_payment_description(request.amount_kopeks), language=getattr(user, 'language', None) or settings.DEFAULT_LANGUAGE, - return_url=cabinet_return_url, + return_url=cabinet_success_url, + failed_url=cabinet_failed_url, ) if result and result.get('payment_url'): @@ -644,7 +649,8 @@ async def create_topup( description=settings.get_balance_payment_description(request.amount_kopeks), telegram_id=user.telegram_id, language=getattr(user, 'language', None) or settings.DEFAULT_LANGUAGE, - return_url=cabinet_return_url, + return_url=cabinet_success_url, + failed_url=cabinet_failed_url, ) if result and result.get('payment_url'): diff --git a/app/services/payment/cloudpayments.py b/app/services/payment/cloudpayments.py index 02642d4f..1c8edb2c 100644 --- a/app/services/payment/cloudpayments.py +++ b/app/services/payment/cloudpayments.py @@ -29,6 +29,7 @@ class CloudPaymentsPaymentMixin: language: str | None = None, email: str | None = None, return_url: str | None = None, + failed_url: str | None = None, ) -> dict[str, Any] | None: """ Create a CloudPayments payment and return payment link info. @@ -80,6 +81,7 @@ class CloudPaymentsPaymentMixin: description=description, email=email, success_redirect_url=return_url, + fail_redirect_url=failed_url, ) except CloudPaymentsAPIError as error: logger.error('Ошибка создания CloudPayments платежа', error=error) diff --git a/app/services/payment/heleket.py b/app/services/payment/heleket.py index f7ba063b..a6773975 100644 --- a/app/services/payment/heleket.py +++ b/app/services/payment/heleket.py @@ -28,6 +28,7 @@ class HeleketPaymentMixin: *, language: str | None = None, return_url: str | None = None, + success_url: str | None = None, ) -> dict[str, Any] | None: if not getattr(self, 'heleket_service', None): logger.error('Heleket сервис не инициализирован') @@ -72,7 +73,7 @@ class HeleketPaymentMixin: payload['url_callback'] = callback_url effective_return = return_url or settings.HELEKET_RETURN_URL - effective_success = return_url or settings.HELEKET_SUCCESS_URL + effective_success = success_url or return_url or settings.HELEKET_SUCCESS_URL if effective_return: payload['url_return'] = effective_return if effective_success: diff --git a/app/services/payment/platega.py b/app/services/payment/platega.py index 93e89831..27dddf63 100644 --- a/app/services/payment/platega.py +++ b/app/services/payment/platega.py @@ -33,6 +33,7 @@ class PlategaPaymentMixin: language: str, payment_method_code: int, return_url: str | None = None, + failed_url: str | None = None, ) -> dict[str, Any] | None: service: PlategaService | None = getattr(self, 'platega_service', None) if not service or not service.is_configured: @@ -61,6 +62,7 @@ class PlategaPaymentMixin: amount_value = amount_kopeks / 100 effective_return_url = return_url or settings.get_platega_return_url() + effective_failed_url = failed_url or settings.get_platega_failed_url() try: response = await service.create_payment( @@ -69,7 +71,7 @@ class PlategaPaymentMixin: currency=settings.PLATEGA_CURRENCY, description=description, return_url=effective_return_url, - failed_url=settings.get_platega_failed_url(), + failed_url=effective_failed_url, payload=payload_token, ) except Exception as error: # pragma: no cover - network errors @@ -105,7 +107,7 @@ class PlategaPaymentMixin: platega_transaction_id=transaction_id, redirect_url=redirect_url, return_url=effective_return_url, - failed_url=settings.get_platega_failed_url(), + failed_url=effective_failed_url, payload=payload_token, metadata=metadata, expires_at=expires_at, diff --git a/app/services/payment/wata.py b/app/services/payment/wata.py index af303430..16c6d863 100644 --- a/app/services/payment/wata.py +++ b/app/services/payment/wata.py @@ -74,6 +74,7 @@ class WataPaymentMixin: *, language: str | None = None, return_url: str | None = None, + failed_url: str | None = None, ) -> dict[str, Any] | None: if not getattr(self, 'wata_service', None): logger.error('WATA service is not initialised') @@ -120,6 +121,7 @@ class WataPaymentMixin: description=description, order_id=order_id, success_url=return_url, + fail_url=failed_url, ) except WataAPIError as error: logger.error('Ошибка создания WATA платежа', error=error)