From 1a87d438fe127a0b62bd6ee59887212869a3cb17 Mon Sep 17 00:00:00 2001 From: Fringg Date: Wed, 18 Mar 2026 17:00:56 +0300 Subject: [PATCH] fix: correct RioPay API header case and remove undocumented fields Header was 'x-api-token' but RioPay API expects 'X-Api-Token' (case-sensitive check on their side), causing 403 Invalid API token. Also removed undocumented 'currency' and 'failUrl' fields from create_order payload per official RioPay API docs. --- app/services/payment/riopay.py | 3 --- app/services/riopay_service.py | 9 ++------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/app/services/payment/riopay.py b/app/services/payment/riopay.py index b63b68a3..1d530c29 100644 --- a/app/services/payment/riopay.py +++ b/app/services/payment/riopay.py @@ -87,7 +87,6 @@ class RioPayPaymentMixin: # Генерируем уникальный order_id с telegram_id для удобного поиска order_id = f'rp{tg_id}_{uuid.uuid4().hex[:6]}' amount_rubles = amount_kopeks / 100 - currency = settings.RIOPAY_CURRENCY # Срок действия платежа (1 час по умолчанию) expires_at = datetime.now(UTC) + timedelta(hours=1) @@ -105,11 +104,9 @@ class RioPayPaymentMixin: # Используем API для создания заказа result = await riopay_service.create_order( amount=amount_rubles, - currency=currency, external_id=order_id, purpose=description, success_url=success_url or settings.RIOPAY_SUCCESS_URL, - fail_url=fail_url or settings.RIOPAY_FAIL_URL, ) payment_url = result.get('paymentLink') diff --git a/app/services/riopay_service.py b/app/services/riopay_service.py index 70221123..20dbc419 100644 --- a/app/services/riopay_service.py +++ b/app/services/riopay_service.py @@ -45,7 +45,7 @@ class RioPayService: def _get_headers(self) -> dict[str, str]: """Формирует заголовки для API запросов.""" return { - 'x-api-token': self.api_token, + 'X-Api-Token': self.api_token, 'Content-Type': 'application/json', } @@ -67,11 +67,10 @@ class RioPayService: self, *, amount: float, - currency: str = 'RUB', external_id: str, purpose: str = 'Пополнение баланса', success_url: str | None = None, - fail_url: str | None = None, + ) -> dict[str, Any]: """ Создает заказ через API RioPay. @@ -82,21 +81,17 @@ class RioPayService: """ payload: dict[str, Any] = { 'amount': str(amount), - 'currency': currency, 'externalId': external_id, 'purpose': purpose, } if success_url: payload['successUrl'] = success_url - if fail_url: - payload['failUrl'] = fail_url logger.info( 'RioPay API create_order', external_id=external_id, amount=amount, - currency=currency, ) try: