fix(payments): keep callback redirect resilient to Redis

This commit is contained in:
2026-10-01 15:20:26 +03:30
parent f924fcc52e
commit efeacaebd0
2 changed files with 68 additions and 18 deletions

View File

@@ -13,6 +13,8 @@ from typing import List
from ninja import Query, Router
from ninja.errors import HttpError
import requests
import redis
from kombu.exceptions import OperationalError as KombuOperationalError
from apps.payments.models import Payment, DiscountCode
from apps.events.models import Event, Registration
@@ -236,26 +238,38 @@ def _event_action_url(event: Event) -> str:
def _notify_payment_status(payment: Payment, *, title: str, message: str, level: str):
notify_user(
payment.user_id,
{
"type": "payment_status",
"title": title,
"message": message,
"level": level,
"action_url": _event_action_url(payment.event),
"entity_type": "payment",
"entity_id": payment.id,
"meta": {
"event_id": payment.event_id,
"payment_id": payment.id,
"ref_id": payment.ref_id,
"status": payment.status,
try:
notify_user(
payment.user_id,
{
"type": "payment_status",
"title": title,
"message": message,
"level": level,
"action_url": _event_action_url(payment.event),
"entity_type": "payment",
"entity_id": payment.id,
"meta": {
"event_id": payment.event_id,
"payment_id": payment.id,
"ref_id": payment.ref_id,
"status": payment.status,
},
},
},
)
)
except redis.exceptions.RedisError:
logger.exception(
"Unable to store payment status notification for payment %s; payment state is already saved",
payment.id,
)
if payment.user.mobile and payment.user.is_mobile_verified:
send_critical_sms.delay(payment.user.mobile, "payment_status", payment.event.title)
try:
send_critical_sms.delay(payment.user.mobile, "payment_status", payment.event.title)
except (KombuOperationalError, redis.exceptions.RedisError):
logger.exception(
"Unable to queue payment status SMS for payment %s; payment state is already saved",
payment.id,
)
def _payment_status_name(payment: Payment) -> str: