diff --git a/api/routes/pally.py b/api/routes/pally.py index 10744ad..6e1805e 100644 --- a/api/routes/pally.py +++ b/api/routes/pally.py @@ -34,7 +34,7 @@ async def pally_callback( bot: Bot = Depends(get_bot), deps: APIDependenciesDTO = Depends(get_deps), ): - oid = InvId.removeprefix("payment-") + oid = custom or "" raw_string = f"{OutSum}:{InvId}:{settings.pally_token}" expected_signature = hashlib.md5(raw_string.encode("utf-8")).hexdigest().upper() @@ -49,7 +49,7 @@ async def pally_callback( logger.info("Received successfully paid bill %s", TrsId) if not oid.isdigit(): - logger.critical("Invalid InvId format for TrsId %s: %s", TrsId, InvId) + logger.critical("Invalid custom field format for TrsId %s", TrsId) return "OK" bill = await deps.bills_repository.get_bill_by_id(session, int(oid)) diff --git a/bot/texts.py b/bot/texts.py index d1a71df..b62bf73 100644 --- a/bot/texts.py +++ b/bot/texts.py @@ -174,17 +174,15 @@ REFERALS_MENU = ( # ОФОРМЛЕНИЕ ПОДПИСКИ # ============================================================ -SUBSCRIPTION_DEVICE_SELECTOR = ( - f"{MALENIA_QUESTION} Сколько устройств вы хотите подключить?\n\nЦена: {{price}}₽" -) +SUBSCRIPTION_DEVICE_SELECTOR = f"{MALENIA_QUESTION} Сколько устройств вы хотите подключить?\n\nЦена: {{price}}₽" -SUBSCRIPTION_DURATION_SELECTOR = f"{MALENIA_QUESTION} На какой срок хотите оформить подписку?\n\nИтого: {{price}}₽ (скидка: {{discount}}%)" +SUBSCRIPTION_DURATION_SELECTOR = ( + f"{MALENIA_QUESTION} На какой срок хотите оформить подписку?\n\nИтого: {{price}}₽ (скидка: {{discount}}%)" +) WHITELISTS_ALREADY_ON = "Белые списки уже активны." -CHECKOUT_PAYMENT_CHOICE = ( - f"{MALENIA_BANK} Пополнение баланса:\n\n❓ Выберите способ оплаты:" -) +CHECKOUT_PAYMENT_CHOICE = f"{MALENIA_BANK} Пополнение баланса:\n\n❓ Выберите способ оплаты:" # ============================================================ @@ -205,13 +203,13 @@ BILL_CREATED = _BILL_TEMPLATE + _DIVIDER + _BILL_LINK INSUFFICIENT_FUNDS = f"{MALENIA_CROSS} Недостаточно средств для проведения операции.\n\n💰 Текущий баланс: {{balance}}₽\n💸 Требуется: {{amount}}₽\n\n{MALENIA_CARD} Пополните баланс на {{diff}}₽" -SUCCESSFULLY_CREATED_SUBSCRIPTION = f"{MALENIA_HEART} Ваша подписка успешно оплачена! Ссылка на добавления доступна в главном меню." +SUCCESSFULLY_CREATED_SUBSCRIPTION = ( + f"{MALENIA_HEART} Ваша подписка успешно оплачена! Ссылка на добавления доступна в главном меню." +) DEPOSIT_AMOUNT = f"{MALENIA_COINS} Укажите сумму пополнения:" -DEPOSIT_AMOUNT_FALLBACK = ( - f"{MALENIA_CROSS} Сумма пополнения указана неверно, повторите попытку." -) +DEPOSIT_AMOUNT_FALLBACK = f"{MALENIA_CROSS} Сумма пополнения указана неверно, повторите попытку." DEPOSIT_AMOUNT_BELOW_MINIMAL = ( f"{MALENIA_CROSS} Сумма пополнения ниже минимальной - {{threshold}}₽." diff --git a/tests/send_pally_webhook.py b/tests/send_pally_webhook.py index 9d14381..0c19582 100644 --- a/tests/send_pally_webhook.py +++ b/tests/send_pally_webhook.py @@ -21,7 +21,6 @@ load_dotenv() ENDPOINT = "/pally/result" - def calculate_signature( out_sum: str, inv_id: str, @@ -47,21 +46,25 @@ def main(): pally_token = os.environ["PALLY_TOKEN"] - inv_id = str(args.bill_id) - out_sum = str(args.amount) - trs_id = f"test_trs_{args.bill_id}" + # Эти поля могут быть любыми строками — вебхук их не использует содержательно, + # только включает в подпись. Главное чтобы совпадали с тем, что пойдёт в подпись. + payment_id = "test_payment_001" + bill_id = f"test_bill_{args.bill_id}" currency = "RUB" + order_id = str(args.bill_id) # order_id == id счёта в нашей БД - signature = calculate_signature(out_sum, inv_id, pally_token) + signature = calculate_signature( + payment_id, args.status, str(args.amount), currency, order_id, pally_token + ) payload = { - "InvId": inv_id, - "OutSum": out_sum, - "Commission": "0", - "TrsId": trs_id, - "Status": args.status, - "CurrencyIn": currency, - "SignatureValue": signature, + "id": payment_id, + "bill_id": bill_id, + "status": args.status, + "req_amount": str(args.amount), + "currency": currency, + "order_id": order_id, + "signature": signature, } print(f"{args.host}{ENDPOINT}")