171 lines
5.5 KiB
Python
171 lines
5.5 KiB
Python
import json
|
|
from django.shortcuts import render
|
|
from django.http import JsonResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
|
|
from .services.cashfree_client import CashfreeSecureIDClient
|
|
|
|
def get_cashfree_client(request):
|
|
"""
|
|
Instantiate client using session-stored override credentials if available,
|
|
otherwise fallback to environment variables.
|
|
"""
|
|
client_id = request.session.get('CASHFREE_CLIENT_ID')
|
|
client_secret = request.session.get('CASHFREE_CLIENT_SECRET')
|
|
environment = request.session.get('CASHFREE_ENV', 'TEST')
|
|
|
|
return CashfreeSecureIDClient(
|
|
client_id=client_id,
|
|
client_secret=client_secret,
|
|
environment=environment
|
|
)
|
|
|
|
def index_view(request):
|
|
"""
|
|
Main Web Application Dashboard UI.
|
|
"""
|
|
client = get_cashfree_client(request)
|
|
context = {
|
|
"client_id": client.client_id,
|
|
"environment": client.environment,
|
|
"has_credentials": client.has_credentials(),
|
|
}
|
|
return render(request, "verifier/index.html", context)
|
|
|
|
@api_view(['GET', 'POST'])
|
|
def config_api_view(request):
|
|
"""
|
|
API to fetch or update active Cashfree credentials and environment configuration.
|
|
"""
|
|
if request.method == 'GET':
|
|
client = get_cashfree_client(request)
|
|
return Response({
|
|
"client_id": client.client_id,
|
|
"has_credentials": client.has_credentials(),
|
|
"environment": client.environment,
|
|
"base_url": client.base_url
|
|
})
|
|
elif request.method == 'POST':
|
|
data = request.data or {}
|
|
client_id = data.get('client_id', '').strip()
|
|
client_secret = data.get('client_secret', '').strip()
|
|
environment = data.get('environment', 'TEST').upper()
|
|
|
|
request.session['CASHFREE_CLIENT_ID'] = client_id
|
|
request.session['CASHFREE_CLIENT_SECRET'] = client_secret
|
|
request.session['CASHFREE_ENV'] = environment
|
|
|
|
client = CashfreeSecureIDClient(client_id=client_id, client_secret=client_secret, environment=environment)
|
|
verify_res = client.verify_credentials() if client.has_credentials() else {"success": False, "message": "No credentials provided"}
|
|
|
|
return Response({
|
|
"message": "Configuration updated successfully",
|
|
"client_id": client.client_id,
|
|
"environment": client.environment,
|
|
"has_credentials": client.has_credentials(),
|
|
"credential_check": verify_res
|
|
})
|
|
|
|
@api_view(['POST'])
|
|
def verify_pan_api(request):
|
|
"""
|
|
POST /api/verify/pan/
|
|
Verify PAN details (Individual / Business).
|
|
"""
|
|
data = request.data or {}
|
|
pan = data.get('pan', '')
|
|
name = data.get('name', '')
|
|
pan_type = data.get('type', 'INDIVIDUAL')
|
|
|
|
if not pan:
|
|
return Response({
|
|
"error": "PAN parameter is required.",
|
|
"field": "pan"
|
|
}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
client = get_cashfree_client(request)
|
|
result = client.verify_pan(pan=pan, name=name, pan_type=pan_type)
|
|
return Response(result)
|
|
|
|
@api_view(['POST'])
|
|
def verify_aadhaar_api(request):
|
|
"""
|
|
POST /api/verify/aadhaar/
|
|
Verify Aadhaar details or execute Aadhaar masking.
|
|
"""
|
|
data = request.data or {}
|
|
aadhaar_number = data.get('aadhaar_number', '')
|
|
action = data.get('action', 'verify') # 'verify' or 'mask'
|
|
|
|
if not aadhaar_number:
|
|
return Response({
|
|
"error": "Aadhaar number parameter is required.",
|
|
"field": "aadhaar_number"
|
|
}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
client = get_cashfree_client(request)
|
|
result = client.verify_aadhaar(aadhaar_number=aadhaar_number, action=action)
|
|
return Response(result)
|
|
|
|
@api_view(['POST'])
|
|
def verify_gstin_api(request):
|
|
"""
|
|
POST /api/verify/gstin/
|
|
Verify Goods and Services Tax Identification Number (GSTIN).
|
|
"""
|
|
data = request.data or {}
|
|
gstin = data.get('gstin', '')
|
|
|
|
if not gstin:
|
|
return Response({
|
|
"error": "GSTIN parameter is required.",
|
|
"field": "gstin"
|
|
}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
client = get_cashfree_client(request)
|
|
result = client.verify_gstin(gstin=gstin)
|
|
return Response(result)
|
|
|
|
@api_view(['POST'])
|
|
def verify_ifsc_api(request):
|
|
"""
|
|
POST /api/verify/ifsc/
|
|
Lookup bank details, branch address, and supported payment modes using IFSC code.
|
|
"""
|
|
data = request.data or {}
|
|
ifsc = data.get('ifsc', '')
|
|
|
|
if not ifsc:
|
|
return Response({
|
|
"error": "IFSC code parameter is required.",
|
|
"field": "ifsc"
|
|
}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
client = get_cashfree_client(request)
|
|
result = client.verify_ifsc(ifsc=ifsc)
|
|
return Response(result)
|
|
|
|
@api_view(['POST'])
|
|
def verify_bank_account_api(request):
|
|
"""
|
|
POST /api/verify/bank-account/
|
|
Synchronous Bank Account Verification (BAV Sync).
|
|
"""
|
|
data = request.data or {}
|
|
bank_account = data.get('bank_account', '')
|
|
ifsc = data.get('ifsc', '')
|
|
name = data.get('name', '')
|
|
phone = data.get('phone', '')
|
|
|
|
if not bank_account or not ifsc:
|
|
return Response({
|
|
"error": "Both bank_account and ifsc parameters are required.",
|
|
"fields": ["bank_account", "ifsc"]
|
|
}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
client = get_cashfree_client(request)
|
|
result = client.verify_bank_account(bank_account=bank_account, ifsc=ifsc, name=name, phone=phone)
|
|
return Response(result)
|