import uuid
import requests
from django.db import models
from django.utils.timezone import now
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Payment
from .views import *
class QuickbooksCreatePaymentView(APIView):
def post(self, request):
try:
response = refresh_token()
access_token = response["access_token"]
base_url = 'https://sandbox.api.intuit.com/quickbooks/v4/payments/charges/'
auth_header = 'Bearer {0}'.format(access_token)
headers = {
'Authorization': auth_header,
'Request-Id': str(uuid.uuid4()),
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0',
'Accept-Encoding': 'gzip, deflate, br'
}
data = request.data
amount = data.get('amount')
payment_method = data.get('payment_method')
if payment_method == 'card':
payment_data = {
'amount': float(amount),
'currency': data.get('currency'),
'card': {
'name': data.get('card_name'),
'address': data.get('address'),
'expYear': data.get('exp_year'),
'expMonth': data.get('exp_month'),
'number': data.get('number'),
'cvc': data.get('cvc')
},
'context': {
'mobile': False,
'isEcommerce': True
}
}
elif payment_method == 'digital_wallet':
payment_data = {
'amount': float(amount),
'currency': data.get('currency'),
'digitalWallet': {
'type': data.get('digital_wallet_type'),
'id': data.get('digital_wallet_id')
},
'context': {
'mobile': False,
'isEcommerce': True
}
}
elif payment_method == 'internet_banking':
payment_data = {
'amount': float(amount),
'currency': data.get('currency'),
'bankTransfer': {
'account': data.get('bank_account_number'),
'routingNumber': data.get('bank_routing_number')
},
'context': {
'mobile': False,
'isEcommerce': True
}
}
else:
return Response({'error': 'Invalid payment method'}, status=400)
response = requests.post(base_url, headers=headers, json=payment_data)
if response.status_code == 201:
response_data = response.json()
charge_id = response_data.get('id')
Payment.objects.create(
payment_id=uuid.uuid4(),
amount=amount,
status='Success',
order_id=charge_id,
created_at=now()
)
return Response({'message': 'Payment Success', 'charge_id': charge_id, 'success': True}, status=201)
else:
return Response({'error': 'Failed to create a payment', 'success': False}, status=response.status_code)
except Exception as e:
return Response({'error': str(e)}, status=500)