4
i am using razorpay payment gateway web integration for my learning eccomerce project everyhing work fine payment can be done all i want is to store my cart data in OrderPlaced table and delete the cart data from Carts table and redirect the page on home after payment done in my order model using test mode. but in this code something is wrong after payment completion Nothing happen no changes nor in Carts table neither in OrderPlaced table. This is my Checkout View for the payment initiation
class checkout(View):
def get(self, request):
user = request.user
add = Customer.objects.filter(user=user)
cart_items = Cart.objects.filter(user=user)
famount = 0
for p in cart_items:
value = p.quantity*p.product.discounted_price
famount = famount+value
totalamount = famount+30
razoramount = int(totalamount * 100)
client = razorpay.Client(
auth=(settings.RAZOR_KEY_ID, settings.RAZOR_KEY_SECRET))
data = {"amount": razoramount, "currency": "INR",
"receipt": "order_rcptid_12"}
payment_response = client.order.create(data=data)
print(payment_response)
order_id = payment_response['id']
order_status = payment_response['status']
if order_status == 'created':
payment = Payment(
user=user,
amount=totalamount,
razorpay_order_id=order_id,
razorpay_payment_status=order_status
)
payment.save()
return render(request, 'app/checkout.html', locals())
And this is my paymentDone View here i try to store all cart items in OrderPlace table and delete item from the Cart table..
def payment_done(request):
order_id = request.GET.get('order_id')
payment_id = request.GET.get('payment_id')
cust_id = request.GET.get('cust_id')
user = request.user
customer = Customer.objects.get(id=cust_id)
payment = Payment.objects.get(razorpay_order_id=order_id)
payment.paid = True
payment.razorpay_payment_id = payment_id
payment.save()
cart = Cart.objects.filter(user=user)
for c in cart:
OrderPlaced(user=user, customer=customer, product=c.product,
quantity=c.quantity, payment=payment).save()
c.delete()
return redirect("orders")
And these Are my Models for the payment and OrderPlaced tabe and Cart tabel..
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
@property
def total_cost(self):
return self.quantity * self.product.discounted_price
class Payment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
amount = models.FloatField()
razorpay_order_id = models.CharField(max_length=100, blank=True, null=True)
razorpay_payment_status = models.CharField(
max_length=100, blank=True, null=True)
razorpay_payment_id = models.CharField(
max_length=100, blank=True, null=True)
paid = models.BooleanField(default=False)
STATUS_CHOICES = (
('Accepted', 'Accepted'),
('Packed', 'Packed'),
('On The way', 'On The Way'),
('Delivered', 'Delivered'),
('Cancel', 'Cancel'),
('Pending', 'Pending'),
)
class OrderPlaced(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
ordered_date = models.DateTimeField(auto_now_add=True)
status = models.CharField(
max_length=50, choices=STATUS_CHOICES, default='Pending')
payment = models.ForeignKey(Payment, on_delete=models.CASCADE, default="")
@property
def total_cost(self):
return self.quantity*self.product.discounted_price
Any Idea What i am Doing worng??
i want is to store my cart data in OrderPlaced table and delete the cart data from Carts table and redirect the page on home after payment done in my order model using test mode. this code make payment successfully but not success in placing Order...