Enhance payment method display for YooMoney integration
- Updated the logic for displaying payment method details, specifically for YooMoney, to include account number handling and last four digits extraction. - Improved the consistency of payment method display across different handlers, ensuring a clearer user experience. - Refactored relevant sections in both payment and subscription handlers to accommodate the new display logic.
This commit is contained in:
@@ -143,12 +143,19 @@ async def process_successful_payment(session: AsyncSession, bot: Bot,
|
|||||||
pm_type = payment_method.get("type")
|
pm_type = payment_method.get("type")
|
||||||
title = payment_method.get("title")
|
title = payment_method.get("title")
|
||||||
card = payment_method.get("card") or {}
|
card = payment_method.get("card") or {}
|
||||||
|
account_number = payment_method.get("account_number") or payment_method.get("account")
|
||||||
display_network = None
|
display_network = None
|
||||||
display_last4 = None
|
display_last4 = None
|
||||||
# Build generic display for various instrument types
|
# Build generic display for various instrument types
|
||||||
if (pm_type or "").lower() in {"bank_card", "bank-card", "card"}:
|
if (pm_type or "").lower() in {"bank_card", "bank-card", "card"}:
|
||||||
display_network = card.get("card_type") or title or "Card"
|
display_network = card.get("card_type") or title or "Card"
|
||||||
display_last4 = card.get("last4")
|
display_last4 = card.get("last4")
|
||||||
|
elif (pm_type or "").lower() in {"yoo_money", "yoomoney", "yoo-money", "wallet"}:
|
||||||
|
display_network = title or "YooMoney"
|
||||||
|
if isinstance(account_number, str) and len(account_number) >= 4:
|
||||||
|
display_last4 = account_number[-4:]
|
||||||
|
else:
|
||||||
|
display_last4 = None
|
||||||
else:
|
else:
|
||||||
# Wallets, SBP, etc. — use provided title/type; no last4
|
# Wallets, SBP, etc. — use provided title/type; no last4
|
||||||
display_network = title or (pm_type.upper() if pm_type else "Payment method")
|
display_network = title or (pm_type.upper() if pm_type else "Payment method")
|
||||||
@@ -408,6 +415,13 @@ async def yookassa_webhook_route(request: web.Request):
|
|||||||
"type": getattr(pm_obj, 'type', None),
|
"type": getattr(pm_obj, 'type', None),
|
||||||
"saved": bool(getattr(pm_obj, 'saved', False)),
|
"saved": bool(getattr(pm_obj, 'saved', False)),
|
||||||
"title": getattr(pm_obj, 'title', None),
|
"title": getattr(pm_obj, 'title', None),
|
||||||
|
"account_number": (
|
||||||
|
getattr(pm_obj, 'account_number', None)
|
||||||
|
if hasattr(pm_obj, 'account_number') else (
|
||||||
|
getattr(pm_obj, 'account', None)
|
||||||
|
if hasattr(pm_obj, 'account') else None
|
||||||
|
)
|
||||||
|
),
|
||||||
"card": (
|
"card": (
|
||||||
{
|
{
|
||||||
"first6": getattr(card_obj, 'first6', None),
|
"first6": getattr(card_obj, 'first6', None),
|
||||||
@@ -479,11 +493,18 @@ async def yookassa_webhook_route(request: web.Request):
|
|||||||
pm_type = payment_method.get("type")
|
pm_type = payment_method.get("type")
|
||||||
title = payment_method.get("title")
|
title = payment_method.get("title")
|
||||||
card = payment_method.get("card") or {}
|
card = payment_method.get("card") or {}
|
||||||
|
account_number = payment_method.get("account_number") or payment_method.get("account")
|
||||||
display_network = None
|
display_network = None
|
||||||
display_last4 = None
|
display_last4 = None
|
||||||
if (pm_type or "").lower() in {"bank_card", "bank-card", "card"}:
|
if (pm_type or "").lower() in {"bank_card", "bank-card", "card"}:
|
||||||
display_network = card.get("card_type") or title or "Card"
|
display_network = card.get("card_type") or title or "Card"
|
||||||
display_last4 = card.get("last4")
|
display_last4 = card.get("last4")
|
||||||
|
elif (pm_type or "").lower() in {"yoo_money", "yoomoney", "yoo-money", "wallet"}:
|
||||||
|
display_network = title or "YooMoney"
|
||||||
|
if isinstance(account_number, str) and len(account_number) >= 4:
|
||||||
|
display_last4 = account_number[-4:]
|
||||||
|
else:
|
||||||
|
display_last4 = None
|
||||||
else:
|
else:
|
||||||
display_network = title or (pm_type.upper() if pm_type else "Payment method")
|
display_network = title or (pm_type.upper() if pm_type else "Payment method")
|
||||||
display_last4 = None
|
display_last4 = None
|
||||||
|
|||||||
@@ -316,9 +316,13 @@ async def pay_yk_callback_handler(
|
|||||||
pm_type = pm.get('type')
|
pm_type = pm.get('type')
|
||||||
title = pm.get('title')
|
title = pm.get('title')
|
||||||
card = pm.get('card') or {}
|
card = pm.get('card') or {}
|
||||||
|
account_number = pm.get('account_number') or pm.get('account')
|
||||||
if isinstance(card, dict) and (pm_type or '').lower() in {"bank_card", "bank-card", "card"}:
|
if isinstance(card, dict) and (pm_type or '').lower() in {"bank_card", "bank-card", "card"}:
|
||||||
display_network = card.get('card_type') or title or 'Card'
|
display_network = card.get('card_type') or title or 'Card'
|
||||||
display_last4 = card.get('last4')
|
display_last4 = card.get('last4')
|
||||||
|
elif (pm_type or '').lower() in {"yoo_money", "yoomoney", "yoo-money", "wallet"}:
|
||||||
|
display_network = title or 'YooMoney'
|
||||||
|
display_last4 = account_number[-4:] if isinstance(account_number, str) and len(account_number) >= 4 else None
|
||||||
else:
|
else:
|
||||||
display_network = title or (pm_type.upper() if pm_type else 'Payment method')
|
display_network = title or (pm_type.upper() if pm_type else 'Payment method')
|
||||||
display_last4 = None
|
display_last4 = None
|
||||||
|
|||||||
Reference in New Issue
Block a user