From 358ef6ded72385fbe74520869bc9304c6a2766cd Mon Sep 17 00:00:00 2001 From: 3252a8 <3252a8@proton.me> Date: Thu, 4 Jun 2026 16:33:50 +0300 Subject: [PATCH] chore: expand default PayKilla payment currencies --- backend/bot/payment_providers/paykilla.py | 8 ++++---- docs/configuration/env-vars.md | 2 +- docs/features/payments.md | 2 +- frontend/src/lib/webapp/settingsManifest.generated.json | 4 ++-- tests/test_security.py | 5 ++++- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/backend/bot/payment_providers/paykilla.py b/backend/bot/payment_providers/paykilla.py index 4142b15..a7cdbb3 100644 --- a/backend/bot/payment_providers/paykilla.py +++ b/backend/bot/payment_providers/paykilla.py @@ -67,7 +67,7 @@ from .shared import ( router = Router(name="user_subscription_payments_paykilla_router") _LOG = "paykilla" -PAYKILLA_DEFAULT_PAYMENT_CURRENCIES = "USDTTRC" +PAYKILLA_DEFAULT_PAYMENT_CURRENCIES = "USDTTRC,BTC,ETH,USDTBSC,USDTTON" PAYKILLA_DEFAULT_INVOICE_CURRENCIES = "USD,EUR" PAYKILLA_DEFAULT_EXCHANGE_RATE_URL = "https://open.er-api.com/v6/latest/{source}" PAYKILLA_DEFAULT_MIN_PAYMENT_AMOUNT = 10.0 @@ -336,7 +336,7 @@ def _invoice_text(title: Any, payment_db_id: int) -> str: def _payment_currencies(config: PaykillaConfig) -> List[str]: currencies = list(parse_supported_currency_codes(config.PAYMENT_CURRENCIES)) - return currencies or ["USDTTRC"] + return currencies or list(parse_supported_currency_codes(PAYKILLA_DEFAULT_PAYMENT_CURRENCIES)) def _invoice_currencies(config: PaykillaConfig) -> tuple[str, ...]: @@ -1425,8 +1425,8 @@ _CONFIG_MANIFEST = ( "string", "Accepted crypto tickers", description=( - "Comma-separated PayKilla tickers sent as paymentCurrencies, e.g. USDTTRC. " - "Add BTC/ETH only when enabled for the merchant account." + "Comma-separated PayKilla tickers sent as paymentCurrencies. " + "Default: USDTTRC,BTC,ETH,USDTBSC,USDTTON." ), placeholder=PAYKILLA_DEFAULT_PAYMENT_CURRENCIES, subsection="PayKilla", diff --git a/docs/configuration/env-vars.md b/docs/configuration/env-vars.md index 7bf5ba7..b2e43f2 100644 --- a/docs/configuration/env-vars.md +++ b/docs/configuration/env-vars.md @@ -378,7 +378,7 @@ Webhook настраивается в PayKilla Dashboard: **Settings -> Webhooks | `PAYKILLA_SECRET_KEY` / `PAYKILLA_V2_SECRET_KEY` | Secret HMAC key для подписи API-запросов и проверки webhook. | | `PAYKILLA_CURRENCY` | Резервная валюта инвойса PayKilla для платежей, чья валюта тарифа не входит в `PAYKILLA_INVOICE_CURRENCIES`. По умолчанию `USD`. | | `PAYKILLA_INVOICE_CURRENCIES` | Валюты, которые PayKilla принимает в поле `currency` при создании invoice. По умолчанию `USD,EUR`. Если тариф в `RUB`, Minishop конвертирует сумму в `PAYKILLA_CURRENCY`. | -| `PAYKILLA_PAYMENT_CURRENCIES` | Crypto tickers для оплаты. Рекомендуемый стартовый вариант: `USDTTRC`; добавляйте `BTC`, `ETH` и другие тикеры только если они доступны в PayKilla Dashboard для merchant account. | +| `PAYKILLA_PAYMENT_CURRENCIES` | Crypto tickers для оплаты. По умолчанию `USDTTRC,BTC,ETH,USDTBSC,USDTTON`; оставляйте в списке только тикеры, доступные в PayKilla Dashboard для merchant account. | | `PAYKILLA_SUPPORTED_CURRENCIES` | Валюты тарифов/платежей, которым разрешено использовать PayKilla в этом магазине. | | `PAYKILLA_INVOICE_TYPE` | Необязательный override: `FIAT_BASED`, `FIXED_AMOUNT` или `OPEN_AMOUNT`. | | `PAYKILLA_LIFETIME_SECONDS` | TTL инвойса, отправляется как `expiredAt`. | diff --git a/docs/features/payments.md b/docs/features/payments.md index b430da7..194a402 100644 --- a/docs/features/payments.md +++ b/docs/features/payments.md @@ -188,7 +188,7 @@ Payload создания invoice содержит обязательные по 1. Включите `PAYKILLA_ENABLED`. 2. Укажите `PAYKILLA_API_KEY` и `PAYKILLA_SECRET_KEY`. 3. Оставьте `PAYKILLA_CURRENCY=USD`, если PayKilla не принимает валюту тарифов как invoice currency. В `PAYKILLA_INVOICE_CURRENCIES` укажите валюты, доступные в PayKilla для поля `currency`, например `USD,EUR`. -4. В `PAYKILLA_PAYMENT_CURRENCIES` начните с `USDTTRC`, а `BTC`, `ETH` и другие тикеры добавляйте только если они доступны в PayKilla Dashboard. +4. В `PAYKILLA_PAYMENT_CURRENCIES` оставьте `USDTTRC,BTC,ETH,USDTBSC,USDTTON` или укажите другой список тикеров, доступных в PayKilla Dashboard. 5. Оставьте `PAYKILLA_MIN_PAYMENT_AMOUNT=10` и `PAYKILLA_MIN_PAYMENT_CURRENCY=USD`, если минимальный invoice PayKilla равен `10 USD`. 6. Убедитесь, что webhook `/webhook/paykilla` настроен в PayKilla: Minishop не отправляет redirect URLs в PayKilla и полагается на webhook для активации платежа. 7. Добавьте `paykilla` в `PAYMENT_METHODS_ORDER`, если хотите задать явный порядок кнопок. diff --git a/frontend/src/lib/webapp/settingsManifest.generated.json b/frontend/src/lib/webapp/settingsManifest.generated.json index 4eb7a29..ce6efd1 100644 --- a/frontend/src/lib/webapp/settingsManifest.generated.json +++ b/frontend/src/lib/webapp/settingsManifest.generated.json @@ -4050,12 +4050,12 @@ "section_order": 4, "subsection": "PayKilla", "label": "Accepted crypto tickers", - "description": "Comma-separated PayKilla tickers sent as paymentCurrencies, e.g. USDTTRC. Add BTC/ETH only when enabled for the merchant account.", + "description": "Comma-separated PayKilla tickers sent as paymentCurrencies. Default: USDTTRC,BTC,ETH,USDTBSC,USDTTON.", "i18n_label_key": "admin_settings_field_paykilla_payment_currencies_label", "i18n_description_key": "admin_settings_field_paykilla_payment_currencies_description", "i18n_subsection_key": "admin_settings_subsection_paykilla", "i18n_placeholder_key": "admin_settings_field_paykilla_payment_currencies_placeholder", - "placeholder": "USDTTRC", + "placeholder": "USDTTRC,BTC,ETH,USDTBSC,USDTTON", "optional": true, "secret": false, "provider_id": "paykilla", diff --git a/tests/test_security.py b/tests/test_security.py index efaa3f5..cf51d27 100644 --- a/tests/test_security.py +++ b/tests/test_security.py @@ -258,7 +258,10 @@ class PaykillaServiceTests(unittest.TestCase): self.assertEqual(body["purpose"], "Tunnel Shop payment 556") self.assertRegex(body["purpose"], r"^[A-Za-z0-9_\s.,]+$") - self.assertEqual(body["paymentCurrencies"], ["USDTTRC"]) + self.assertEqual( + body["paymentCurrencies"], + ["USDTTRC", "BTC", "ETH", "USDTBSC", "USDTTON"], + ) self.assertEqual(body["description"], body["purpose"]) self.assertTrue(body["expiredAt"].endswith("Z")) self.assertTrue(body["userPaysNetworkFee"])