update bank gateway

This commit is contained in:
Parsa Nazer
2026-05-22 20:11:17 +03:30
parent e56df858fd
commit 6ed95784a3
22 changed files with 574 additions and 415 deletions
+29 -5
View File
@@ -4,11 +4,14 @@ import uuid
from urllib import parse
import six
from django.conf import settings as django_settings
from django.db.models import Q
from django.shortcuts import redirect
from django.urls import reverse
from django.utils import timezone
from azbankgateways.utils import append_querystring, build_full_url
from .. import default_settings as settings
from ..exceptions import (
AmountDoesNotSupport,
@@ -18,7 +21,6 @@ from ..exceptions import (
SafeSettingsEnabled,
)
from ..models import Bank, CurrencyEnum, PaymentStatus
from ..utils import append_querystring
# TODO: handle and expire record after 15 minutes
@@ -41,8 +43,12 @@ class BaseBank:
def __init__(self, identifier: str, **kwargs):
self.identifier = identifier
self.default_setting_kwargs = kwargs
self._custom_data: dict = {}
self.set_default_settings()
def _is_strict_origin_policy_enabled(self):
return django_settings.SECURE_REFERRER_POLICY == 'strict-origin-when-cross-origin'
@abc.abstractmethod
def set_default_settings(self):
"""default setting, like fetch merchant code, terminal id and etc"""
@@ -162,6 +168,13 @@ class BaseBank:
def get_mobile_number(self):
return self._mobile_number
def set_custom_data(self, data: dict):
"""تنظیم قابلیت های سفارشی برای درگاه"""
self._custom_data = data
def get_custom_data(self):
return self._custom_data
def set_client_callback_url(self, callback_url):
"""ذخیره کال بک از طریق نرم افزار برای بازگردانی کاربر پس از بازگشت درگاه بانک به پکیج و سپس از پکیج به نرم
افزار."""
@@ -187,7 +200,10 @@ class BaseBank:
def _set_bank_record(self):
try:
self._bank = Bank.objects.get(
Q(Q(reference_number=self.get_reference_number()) | Q(tracking_code=self.get_tracking_code())),
Q(
Q(reference_number=self.get_reference_number())
| Q(tracking_code=self.get_tracking_code())
),
Q(bank_type=self.get_bank_type()),
)
logging.debug("Set reference find bank object.")
@@ -216,7 +232,10 @@ class BaseBank:
return self._transaction_status_text
def _set_payment_status(self, payment_status):
if payment_status == PaymentStatus.RETURN_FROM_BANK and self._bank.status != PaymentStatus.REDIRECT_TO_BANK:
if (
payment_status == PaymentStatus.RETURN_FROM_BANK
and self._bank.status != PaymentStatus.REDIRECT_TO_BANK
):
logging.debug(
"Payment status is not status suitable.",
extra={"status": self._bank.status},
@@ -247,6 +266,10 @@ class BaseBank:
def get_currency(self):
return self._currency
@staticmethod
def get_timeout():
return settings.BANK_TIMEOUT
def get_gateway_amount(self):
return self._gateway_amount
@@ -357,8 +380,8 @@ class BaseBank:
return redirect_url
def _get_gateway_callback_url(self):
url = reverse(settings.CALLBACK_NAMESPACE)
if self.get_request():
url = reverse(settings.CALLBACK_NAMESPACE)
url_parts = list(parse.urlparse(url))
if not (url_parts[0] and url_parts[1]):
url = self.get_request().build_absolute_uri(url)
@@ -366,5 +389,6 @@ class BaseBank:
query.update({"bank_type": self.get_bank_type()})
query.update({"identifier": self.identifier})
url = append_querystring(url, query)
else:
url = build_full_url(settings.CALLBACK_NAMESPACE)
return url