This commit is contained in:
@@ -17,3 +17,40 @@ def resolve_tbank_payment_notification_action(
|
||||
if status == "CONFIRMED" and success is True and error_code == "0":
|
||||
return TBankPaymentNotificationAction.REGISTER_CDEK_ORDER
|
||||
return TBankPaymentNotificationAction.ACKNOWLEDGE_ONLY
|
||||
|
||||
|
||||
# Монотонный приоритет статусов платежа TBank по жизненному циклу.
|
||||
# Используется, чтобы внеочередное уведомление не понижало уже записанный статус
|
||||
# (например, AUTHORIZED, пришедший после CONFIRMED, не должен затирать CONFIRMED).
|
||||
# Неизвестные статусы получают ранг 0 и не перезаписывают известный статус.
|
||||
_TBANK_PAYMENT_STATUS_RANK: dict[str, int] = {
|
||||
"NEW": 10,
|
||||
"FORM_SHOWED": 20,
|
||||
"AUTHORIZING": 30,
|
||||
"3DS_CHECKING": 30,
|
||||
"3DS_CHECKED": 30,
|
||||
"REJECTED": 40,
|
||||
"AUTH_FAIL": 40,
|
||||
"DEADLINE_EXPIRED": 40,
|
||||
"AUTHORIZED": 40,
|
||||
"CONFIRMING": 50,
|
||||
"CONFIRMED": 60,
|
||||
"REVERSING": 70,
|
||||
"PARTIAL_REVERSED": 70,
|
||||
"REVERSED": 70,
|
||||
"REFUNDING": 70,
|
||||
"PARTIAL_REFUNDED": 70,
|
||||
"REFUNDED": 70,
|
||||
"CANCELED": 70,
|
||||
}
|
||||
|
||||
|
||||
def tbank_payment_status_rank(status: str) -> int:
|
||||
return _TBANK_PAYMENT_STATUS_RANK.get(status, 0)
|
||||
|
||||
|
||||
def should_apply_tbank_payment_status(current: str | None, new: str) -> bool:
|
||||
"""Применять новый статус, только если он не понижает текущий по жизненному циклу."""
|
||||
if current is None:
|
||||
return True
|
||||
return tbank_payment_status_rank(new) >= tbank_payment_status_rank(current)
|
||||
|
||||
Reference in New Issue
Block a user