Интеграция Razorpay в Django Project не завершается
Я интегрирую razorpay в проект django. Я создаю заказ через OrderPostApi. При этом создается заказ, и order_ сохраняется в базе данных. Но когда я вызываю представление payment_page с идентификатором заказа, сгенерированным в браузере, я получаю кнопку оплаты, и когда я нажимаю на нее и после заполнения реквизитов (тестовые карты razorpay для тестирования), мой платеж не подтверждается. Он показывает "Ваш платеж находится в обработке" в течение нескольких часов. И я не могу сгенерировать razorpay_payment_id и razorpay_signature в моей базе данных. Я хочу, чтобы, когда я совершу платеж, мой платеж был завершен и я смог получить razorpay_payment_id и razorpay_signature в моей базе данных.
Вот что я сделал.
OrderPostApi:
class OrderPostApi(APIView):
permission_classes = [AllowAny]
Serializer = OrderSerializer
def post(self, request, format=None):
serializer = self.Serializer(data=request.data)
if serializer.is_valid():
#save the order
order = serializer.save()
#create razorpay client
client = razorpay.Client(auth=(settings.RAZORPAY_KEY_ID, settings.RAZORPAY_KEY_SECRET))
#create razorpay order
razorpay_order = client.order.create({
'amount': int(order.total_amount * 100), #amount in paise
'currency':'INR',
'payment_capture':'1'
})
#update order with razorpay details
order.razorpay_order_id = razorpay_order['id']
order.save()
response_data= serializer.data
response_data['razorpay_order_id'] = razorpay_order['id']
return Response(response_data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
OrderPaymentStatusApi:
class OrderPaymentStatusApi(APIView):
permission_classes= [AllowAny]
def post(self, request, format=None):
data = request.data
#verify the payment signature
params_dict={
'razorpay_order_id':data['razorpay_order_id'],
'razorpay_payment_id' : data['razorpay_payment_id'],
'razorpay_signature':data['razorpay_signature']
}
client = razorpay.Client(auth=(settings.RAZORPAY_KEY_ID, settings.RAZORPAY_KEY_SECRET))
try:
client.utility.verify_payment_signature(params_dict)
order = Order.objects.get(razorpay_order_id=data['razorpay_order_id'])
order.razorpay_payment_id=data['razorpay_payment_id']
order.razorpay_signature=data['razorpay_signature']
order.paid=True
order.save()
return Response({'status':'Payment Successful'}, status=status.HTTP_200_OK)
except:
return Response({'status':'Payment Verification Failed'}, status=status.HTTP_400_BAD_REQUEST)
views.py:
from django.shortcuts import render
from django.conf import settings
from .models import Order
def payment_page(request, order_id):
order = Order.objects.get(id=order_id)
context = {
'RAZORPAY_KEY_ID': settings.RAZORPAY_KEY_ID,
'amount': int(order.total_amount * 100), # Amount in paise
'razorpay_order_id': order.razorpay_order_id,
}
return render(request, 'payment.html', context)
urls.py:
path('order-status/', OrderPaymentStatusApi.as_view(), name='order-payment-status'),
path('payment/<int:order_id>/', payment_page, name='payment_page'),
path('order/post/', OrderPostApi.as_view(), name='order post'),
payment.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Razorpay Payment</title>
<script src="https://checkout.razorpay.com/v1/checkout.js"></script>
</head>
<body>
<button id="rzp-button">Pay Now</button>
<script>
var options = {
"key": "{{ RAZORPAY_KEY_ID }}", // Enter the Key ID generated from the Dashboard
"amount": "{{ amount }}", // Amount in paise
"currency": "INR",
"name": "Your Company Name",
"description": "Test Transaction",
"image": "https://your-logo-url.com", // Optional
"order_id": "{{ razorpay_order_id }}", // Pass the `razorpay_order_id` obtained from the API
"handler": function (response) {
console.log('Payment response received:', response);
// Send payment details to your backend for verification
fetch('order-status/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
razorpay_order_id: response.razorpay_order_id,
razorpay_payment_id: response.razorpay_payment_id,
razorpay_signature: response.razorpay_signature,
}),
})
.then(response => response.json())
.then(data => {
console.log('Backend verification response:', data);
if (data.status === 'Payment Successful') {
alert('Payment Successful');
} else {
alert('Payment Verification Failed');
}
})
.catch(error => {
console.error('Error verifying payment:', error);
});
},
"prefill": {
"name": "JohnDoe",
"email": "customer@example.com",
"contact": "9876543212"
},
"notes": {
"address": "Customer Address"
},
"theme": {
"color": "#F37254"
}
};
var rzp1 = new Razorpay(options);
document.getElementById('rzp-button').onclick = function(e){
rzp1.open();
e.preventDefault();
}
</script>
</body>
</html>