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
+18 -28
View File
@@ -1,7 +1,6 @@
import logging
import requests
from zeep import Client, Transport
from azbankgateways.banks import BaseBank
from azbankgateways.exceptions import BankGatewayConnectionError, SettingDoesNotExist
@@ -16,10 +15,16 @@ class SEP(BaseBank):
def __init__(self, **kwargs):
super(SEP, self).__init__(**kwargs)
if not self._is_strict_origin_policy_enabled():
raise SettingDoesNotExist(
"SECURE_REFERRER_POLICY is not set to 'strict-origin-when-cross-origin' in django setting,"
" it's mandatory for Saman gateway"
)
self.set_gateway_currency(CurrencyEnum.IRR)
self._token_api_url = "https://sep.shaparak.ir/MobilePG/MobilePayment"
self._token_api_url = "https://sep.shaparak.ir/onlinepg/onlinepg"
self._payment_url = "https://sep.shaparak.ir/OnlinePG/OnlinePG"
self._verify_api_url = "https://verify.sep.ir/Payments/ReferencePayment.asmx?WSDL"
self._verify_api_url = "https://sep.shaparak.ir/verifyTxnRandomSessionkey/ipg/VerifyTransaction"
def get_bank_type(self):
return BankType.SEP
@@ -32,14 +37,14 @@ class SEP(BaseBank):
def get_pay_data(self):
data = {
"Action": "Token",
"action": "Token",
"Amount": self.get_gateway_amount(),
"Wage": 0,
"TerminalId": self._merchant_code,
"ResNum": self.get_tracking_code(),
"RedirectURL": self._get_gateway_callback_url(),
"CellNumber": self.get_mobile_number(),
}
data.update(self.get_custom_data())
return data
def prepare_pay(self):
@@ -80,15 +85,15 @@ class SEP(BaseBank):
def prepare_verify_from_gateway(self):
super(SEP, self).prepare_verify_from_gateway()
request = self.get_request()
tracking_code = request.GET.get("ResNum", None)
token = request.GET.get("Token", None)
tracking_code = request.GET.get("ResNum")
token = request.GET.get("Token")
self._set_tracking_code(tracking_code)
self._set_bank_record()
ref_num = request.GET.get("RefNum", None)
ref_num = request.GET.get("RefNum")
if request.GET.get("State", "NOK") == "OK" and ref_num:
self._set_reference_number(ref_num)
self._bank.reference_number = ref_num
extra_information = f"TRACENO={request.GET.get('TRACENO', None)}, RefNum={ref_num}, Token={token}"
extra_information = f"TRACENO={request.GET.get('TRACENO')}, RefNum={ref_num}, Token={token}"
self._bank.extra_information = extra_information
self._bank.save()
@@ -101,8 +106,7 @@ class SEP(BaseBank):
def get_verify_data(self):
super(SEP, self).get_verify_data()
data = self.get_reference_number(), self._merchant_code
return data
return {"RefNum": self.get_reference_number(), "TerminalNumber": self._merchant_code}
def prepare_verify(self, tracking_code):
super(SEP, self).prepare_verify(tracking_code)
@@ -110,9 +114,8 @@ class SEP(BaseBank):
def verify(self, transaction_code):
super(SEP, self).verify(transaction_code)
data = self.get_verify_data()
client = self._get_client(self._verify_api_url)
result = client.service.verifyTransaction(*data)
if result == self.get_gateway_amount():
result = self._send_data(api=self._verify_api_url, data=data)
if result.get('ResultCode') == 0:
self._set_payment_status(PaymentStatus.COMPLETE)
else:
self._set_payment_status(PaymentStatus.CANCEL_BY_USER)
@@ -120,7 +123,7 @@ class SEP(BaseBank):
def _send_data(self, api, data):
try:
response = requests.post(api, json=data, timeout=5)
response = requests.post(api, json=data, timeout=self.get_timeout())
except requests.Timeout:
logging.exception("SEP time out gateway {}".format(data))
raise BankGatewayConnectionError()
@@ -131,16 +134,3 @@ class SEP(BaseBank):
response_json = get_json(response)
self._set_transaction_status_text(response_json.get("errorDesc"))
return response_json
@staticmethod
def _get_client(url):
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
}
transport = Transport(timeout=5, operation_timeout=5)
transport.session.headers = headers
client = Client(url, transport=transport)
return client