37794-vm/core/payment_utils.py
2026-01-25 07:53:43 +00:00

67 lines
2.3 KiB
Python

import requests
from django.conf import settings
import logging
logger = logging.getLogger(__name__)
class ThawaniPay:
def __init__(self):
self.api_key = settings.THAWANI_API_KEY
self.base_url = settings.THAWANI_API_URL
self.headers = {
"thawani-api-key": self.api_key,
"Content-Type": "application/json"
}
def create_checkout_session(self, parcel, success_url, cancel_url):
endpoint = f"{self.base_url}/checkout/session"
# Thawani expects price in baiza (1 OMR = 1000 baiza)
# We need to convert Decimal price to integer baiza
amount_baiza = int(parcel.price * 1000)
payload = {
"client_reference_id": str(parcel.tracking_number),
"mode": "payment",
"products": [
{
"name": f"Shipping for Parcel {parcel.tracking_number}",
"unit_amount": amount_baiza,
"quantity": 1
}
],
"success_url": success_url,
"cancel_url": cancel_url,
"metadata": {
"parcel_id": parcel.id,
"customer_name": parcel.shipper.get_full_name() or parcel.shipper.username,
"customer_phone": parcel.shipper.profile.phone_number
}
}
try:
response = requests.post(endpoint, json=payload, headers=self.headers)
response.raise_for_status()
data = response.json()
if data.get("success"):
return data["data"]["session_id"]
else:
logger.error(f"Thawani Error: {data.get('description')}")
return None
except Exception as e:
logger.error(f"Thawani Request Failed: {str(e)}")
return None
def get_checkout_session(self, session_id):
endpoint = f"{self.base_url}/checkout/session/{session_id}"
try:
response = requests.get(endpoint, headers=self.headers)
response.raise_for_status()
data = response.json()
if data.get("success"):
return data["data"]
return None
except Exception as e:
logger.error(f"Thawani Check Failed: {str(e)}")
return None