This commit is contained in:
2026-05-31 14:47:53 +07:00
parent 102a0ebf96
commit 2103e6a882
3 changed files with 26 additions and 25 deletions

View File

@@ -34,7 +34,7 @@ async def pally_callback(
bot: Bot = Depends(get_bot), bot: Bot = Depends(get_bot),
deps: APIDependenciesDTO = Depends(get_deps), deps: APIDependenciesDTO = Depends(get_deps),
): ):
oid = InvId.removeprefix("payment-") oid = custom or ""
raw_string = f"{OutSum}:{InvId}:{settings.pally_token}" raw_string = f"{OutSum}:{InvId}:{settings.pally_token}"
expected_signature = hashlib.md5(raw_string.encode("utf-8")).hexdigest().upper() 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) logger.info("Received successfully paid bill %s", TrsId)
if not oid.isdigit(): 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" return "OK"
bill = await deps.bills_repository.get_bill_by_id(session, int(oid)) bill = await deps.bills_repository.get_bill_by_id(session, int(oid))

View File

@@ -174,17 +174,15 @@ REFERALS_MENU = (
# ОФОРМЛЕНИЕ ПОДПИСКИ # ОФОРМЛЕНИЕ ПОДПИСКИ
# ============================================================ # ============================================================
SUBSCRIPTION_DEVICE_SELECTOR = ( SUBSCRIPTION_DEVICE_SELECTOR = f"<b>{MALENIA_QUESTION} Сколько устройств вы хотите подключить?</b>\n\nЦена: <b>{{price}}₽</b>"
f"<b>{MALENIA_QUESTION} Сколько устройств вы хотите подключить?</b>\n\nЦена: <b>{{price}}₽</b>"
)
SUBSCRIPTION_DURATION_SELECTOR = f"<b>{MALENIA_QUESTION} На какой срок хотите оформить подписку?</b>\n\nИтого: <b>{{price}}₽</b> <i>(скидка: {{discount}}%)</i>" SUBSCRIPTION_DURATION_SELECTOR = (
f"<b>{MALENIA_QUESTION} На какой срок хотите оформить подписку?</b>\n\nИтого: <b>{{price}}₽</b> <i>(скидка: {{discount}}%)</i>"
)
WHITELISTS_ALREADY_ON = "Белые списки уже активны." WHITELISTS_ALREADY_ON = "Белые списки уже активны."
CHECKOUT_PAYMENT_CHOICE = ( CHECKOUT_PAYMENT_CHOICE = f"<b>{MALENIA_BANK} Пополнение баланса:</b>\n\n<i>❓ Выберите способ оплаты:</i>"
f"<b>{MALENIA_BANK} Пополнение баланса:</b>\n\n<i>❓ Выберите способ оплаты:</i>"
)
# ============================================================ # ============================================================
@@ -205,13 +203,13 @@ BILL_CREATED = _BILL_TEMPLATE + _DIVIDER + _BILL_LINK
INSUFFICIENT_FUNDS = f"<b>{MALENIA_CROSS} Недостаточно средств для проведения операции.</b>\n\n<b>💰 Текущий баланс:</b> <code>{{balance}}₽</code>\n<b>💸 Требуется:</b> <code>{{amount}}₽</code>\n\n<i>{MALENIA_CARD} Пополните баланс на <code>{{diff}}₽</code></i>" INSUFFICIENT_FUNDS = f"<b>{MALENIA_CROSS} Недостаточно средств для проведения операции.</b>\n\n<b>💰 Текущий баланс:</b> <code>{{balance}}₽</code>\n<b>💸 Требуется:</b> <code>{{amount}}₽</code>\n\n<i>{MALENIA_CARD} Пополните баланс на <code>{{diff}}₽</code></i>"
SUCCESSFULLY_CREATED_SUBSCRIPTION = f"<b>{MALENIA_HEART} Ваша подписка успешно оплачена!</b> Ссылка на добавления доступна в главном меню." SUCCESSFULLY_CREATED_SUBSCRIPTION = (
f"<b>{MALENIA_HEART} Ваша подписка успешно оплачена!</b> Ссылка на добавления доступна в главном меню."
)
DEPOSIT_AMOUNT = f"<b>{MALENIA_COINS} Укажите сумму пополнения:</b>" DEPOSIT_AMOUNT = f"<b>{MALENIA_COINS} Укажите сумму пополнения:</b>"
DEPOSIT_AMOUNT_FALLBACK = ( DEPOSIT_AMOUNT_FALLBACK = f"<b>{MALENIA_CROSS} Сумма пополнения указана неверно, повторите попытку.</b>"
f"<b>{MALENIA_CROSS} Сумма пополнения указана неверно, повторите попытку.</b>"
)
DEPOSIT_AMOUNT_BELOW_MINIMAL = ( DEPOSIT_AMOUNT_BELOW_MINIMAL = (
f"<b>{MALENIA_CROSS} Сумма пополнения ниже минимальной - <code>{{threshold}}₽</code>.</b>" f"<b>{MALENIA_CROSS} Сумма пополнения ниже минимальной - <code>{{threshold}}₽</code>.</b>"

View File

@@ -21,7 +21,6 @@ load_dotenv()
ENDPOINT = "/pally/result" ENDPOINT = "/pally/result"
def calculate_signature( def calculate_signature(
out_sum: str, out_sum: str,
inv_id: str, inv_id: str,
@@ -47,21 +46,25 @@ def main():
pally_token = os.environ["PALLY_TOKEN"] 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" 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 = { payload = {
"InvId": inv_id, "id": payment_id,
"OutSum": out_sum, "bill_id": bill_id,
"Commission": "0", "status": args.status,
"TrsId": trs_id, "req_amount": str(args.amount),
"Status": args.status, "currency": currency,
"CurrencyIn": currency, "order_id": order_id,
"SignatureValue": signature, "signature": signature,
} }
print(f"{args.host}{ENDPOINT}") print(f"{args.host}{ENDPOINT}")