fix(pally): use InvId instead of custom field for order ID lookup
This commit is contained in:
@@ -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 = custom or ""
|
oid = InvId
|
||||||
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 custom field format for TrsId %s", TrsId)
|
logger.critical("Invalid InvId 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))
|
||||||
|
|||||||
20
bot/texts.py
20
bot/texts.py
@@ -174,15 +174,17 @@ REFERALS_MENU = (
|
|||||||
# ОФОРМЛЕНИЕ ПОДПИСКИ
|
# ОФОРМЛЕНИЕ ПОДПИСКИ
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
SUBSCRIPTION_DEVICE_SELECTOR = f"<b>{MALENIA_QUESTION} Сколько устройств вы хотите подключить?</b>\n\nЦена: <b>{{price}}₽</b>"
|
SUBSCRIPTION_DEVICE_SELECTOR = (
|
||||||
|
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 = f"<b>{MALENIA_BANK} Пополнение баланса:</b>\n\n<i>❓ Выберите способ оплаты:</i>"
|
CHECKOUT_PAYMENT_CHOICE = (
|
||||||
|
f"<b>{MALENIA_BANK} Пополнение баланса:</b>\n\n<i>❓ Выберите способ оплаты:</i>"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -203,13 +205,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 = (
|
SUCCESSFULLY_CREATED_SUBSCRIPTION = f"<b>{MALENIA_HEART} Ваша подписка успешно оплачена!</b> Ссылка на добавления доступна в главном меню."
|
||||||
f"<b>{MALENIA_HEART} Ваша подписка успешно оплачена!</b> Ссылка на добавления доступна в главном меню."
|
|
||||||
)
|
|
||||||
|
|
||||||
DEPOSIT_AMOUNT = f"<b>{MALENIA_COINS} Укажите сумму пополнения:</b>"
|
DEPOSIT_AMOUNT = f"<b>{MALENIA_COINS} Укажите сумму пополнения:</b>"
|
||||||
|
|
||||||
DEPOSIT_AMOUNT_FALLBACK = f"<b>{MALENIA_CROSS} Сумма пополнения указана неверно, повторите попытку.</b>"
|
DEPOSIT_AMOUNT_FALLBACK = (
|
||||||
|
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>"
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ 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,
|
||||||
@@ -46,25 +47,21 @@ 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)
|
||||||
payment_id = "test_payment_001"
|
trs_id = f"test_trs_{args.bill_id}"
|
||||||
bill_id = f"test_bill_{args.bill_id}"
|
|
||||||
currency = "RUB"
|
currency = "RUB"
|
||||||
order_id = str(args.bill_id) # order_id == id счёта в нашей БД
|
|
||||||
|
|
||||||
signature = calculate_signature(
|
signature = calculate_signature(out_sum, inv_id, pally_token)
|
||||||
payment_id, args.status, str(args.amount), currency, order_id, pally_token
|
|
||||||
)
|
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
"id": payment_id,
|
"InvId": inv_id,
|
||||||
"bill_id": bill_id,
|
"OutSum": out_sum,
|
||||||
"status": args.status,
|
"Commission": "0",
|
||||||
"req_amount": str(args.amount),
|
"TrsId": trs_id,
|
||||||
"currency": currency,
|
"Status": args.status,
|
||||||
"order_id": order_id,
|
"CurrencyIn": currency,
|
||||||
"signature": signature,
|
"SignatureValue": signature,
|
||||||
}
|
}
|
||||||
|
|
||||||
print(f"{args.host}{ENDPOINT}")
|
print(f"{args.host}{ENDPOINT}")
|
||||||
|
|||||||
Reference in New Issue
Block a user