update bank gateway
This commit is contained in:
@@ -22,6 +22,12 @@ class BMI(BaseBank):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super(BMI, 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 BMI gateway"
|
||||
)
|
||||
|
||||
self.set_gateway_currency(CurrencyEnum.IRR)
|
||||
self._token_api_url = "https://sadad.shaparak.ir/vpg/api/v0/Request/PaymentRequest"
|
||||
self._payment_url = "https://sadad.shaparak.ir/VPG/Purchase"
|
||||
@@ -54,6 +60,7 @@ class BMI(BaseBank):
|
||||
"OrderId": self.get_tracking_code(),
|
||||
"AdditionalData": "oi:%s-ou:%s" % (self.get_tracking_code(), self.get_mobile_number()),
|
||||
}
|
||||
data.update(self.get_custom_data())
|
||||
return data
|
||||
|
||||
def prepare_pay(self):
|
||||
@@ -63,7 +70,7 @@ class BMI(BaseBank):
|
||||
super(BMI, self).pay()
|
||||
data = self.get_pay_data()
|
||||
response_json = self._send_data(self._token_api_url, data)
|
||||
if response_json["ResCode"] == "0":
|
||||
if str(response_json["ResCode"]) == "0":
|
||||
token = response_json["Token"]
|
||||
self._set_reference_number(token)
|
||||
else:
|
||||
@@ -99,10 +106,11 @@ class BMI(BaseBank):
|
||||
super(BMI, self).verify(transaction_code)
|
||||
data = self.get_verify_data()
|
||||
response_json = self._send_data(self._verify_api_url, data)
|
||||
if response_json["ResCode"] == "0":
|
||||
if str(response_json["ResCode"]) == "0":
|
||||
self._set_payment_status(PaymentStatus.COMPLETE)
|
||||
extra_information = (
|
||||
f"RetrivalRefNo={response_json['RetrivalRefNo']},SystemTraceNo={response_json['SystemTraceNo']}"
|
||||
f"RetrivalRefNo={response_json['RetrivalRefNo']}"
|
||||
",SystemTraceNo={response_json['SystemTraceNo']}"
|
||||
)
|
||||
self._bank.extra_information = extra_information
|
||||
self._bank.save()
|
||||
@@ -113,10 +121,13 @@ class BMI(BaseBank):
|
||||
def prepare_verify_from_gateway(self):
|
||||
super(BMI, self).prepare_verify_from_gateway()
|
||||
request = self.get_request()
|
||||
for method in ["POST", "GET", "data", "PUT"]:
|
||||
token = getattr(request, method, {}).get("token", None)
|
||||
if token:
|
||||
method_data = getattr(request, "POST", {})
|
||||
token = None
|
||||
for key, value in method_data.items():
|
||||
if key.lower() == "token":
|
||||
token = value
|
||||
break
|
||||
|
||||
if not token:
|
||||
raise BankGatewayStateInvalid
|
||||
self._set_reference_number(token)
|
||||
@@ -142,7 +153,7 @@ class BMI(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("BMI time out gateway {}".format(data))
|
||||
raise BankGatewayConnectionError()
|
||||
|
||||
Reference in New Issue
Block a user