在结账文件中通过链接传递查询时获取客户ID值时出现值错误,我正在使用Razorpay支付网关
我在使用Django框架的时候,遇到了一个值错误,特别是在使用Razorpay支付网关的时候。这里有个图片说明
这是模型部分
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)
class OrderPlaced(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
#cid = models.ForeignKey(Payment,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.DateField(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
这是HTML代码
{% extends 'app/base.html' %}
{% load static %}
{% block title %}
Buy Now
{% endblock %}
{% block main-content %}
<div class="container">
{% if messages %}
{% for msg in messages %}
<div class="alert alert-denger" role="alert">
{{msg}}
</div>
{% endfor %}
{% endif %}
<div class="row mt-5">
<div class="col-sm-6">
<h4> Order Summery </h4>
<hr>
{% for item in cart_items %}
<div class="card mb-2">
<div class="card-body">
<h5> Product: {{item.product.title}}</h5>
<p>Quantity: {{item.quantity}} </p>
<p class="fw-bold">Price: {{item.product.discounted_price}}</p>
</div>
</div>
{% endfor %}
<p class="fw-bold"> Total Cost + Rs. 40 = {{totalamount}}</p>
<small>Term and Conditions: Lorem ipsum dolor sit amet consectetur.</small>
</div>
<div class="col-sm-4 offset-sm-1">
<h4>Select Shipping Address </h4>
<hr>
<form method="post" id="myform">
{% csrf_token %}
{% for ad in add %}
<div class="card">
<div class="card-body">
<h5>{{ad.name}}</h5>
<p> Mobile No.: {{ad.mobile}}</p>
<p>{{ad.locality}} {{ad.city}} {{ad.state}} - {{ad.zipcode}}</p>
</div>
</div>
<div class="form-check mt-2 mb-5">
<input class="form-check-input" type="radio" name="custid" id="custadd{{forloop.counter}}" value="{{ad.id}}">
<label class="form-check-label fw-bold" for="custadd{{forloop.counter}}">
Address:{{forloop.counter}}</label>
</div>
{% endfor %}
<div class="form-check mb-3">
<label for="totanount" class="form-label"> Total Amount</label>
<input type="number" class="form-control" name="totamount" value={{totalamount}} readonly>
</div>
<div class="text-end">
{% comment "" %} <button type="submit" class="btn btn-warning mt-3 px-5 fw-bold"> Continue </button>{% endcomment %}
<!--<div id="paypal-button-container"> </div>-->
<button id="rzp-button1" type="submit" class="btn btn-warning mt-3 ox-5 fw-bold" > Payment </button>
<br> <br> <br>
</div>
</form>
</div>
</div>
</div>
{% endblock main-content %}
{% block payment-gateway %}
<script>
var options = {
"key": "rzp_test_Xjdfwh2QHqbpcz",
"amount": "50000",
"currency": "INR",
"name": "Raju General Shop",
"description": "Get Best And Fresh Products",
"order_id": "{{order_id}}",
"handler": function (response){
console.log("Success")
var form = document.getElementById("myform");
alert(response.razorpay_payment_id);
alert(response.razorpay_order_id);
alert(response.razorpay_signature);
window.location.href = ' http://127.0.0.1:8000/paymentdone?order_id=${response.razorpay_order_id}&payment_id=${response.razorpay_payment_id}&cust_id=${form.elements["custid"].value}'
},
"theme": {
"color": "#3399cc"
}
};
var rzp1 = new Razorpay(options);
rzp1.on('payment.failed', function (response){
alert(response.error.code);
alert(response.error.description);
alert(response.error.source);
alert(response.error.step);
alert(response.error.reason);
alert(response.error.metadata.order_id);
alert(response.error.metadata.payment_id);
});
document.getElementById('rzp-button1').onclick = function(e){
rzp1.open();
e.preventDefault();
}
</script>
{% endblock payment-gateway %}
这是视图函数
class checkout(View):
def get(self,request):
user = request.user
add = Customer.objects.filter(user=user)
cart_items = Cart.objects.filter(user=user)
amount=0
for p in cart_items:
value = p.quantity*p.product.discounted_price
amount = amount + value
totalamount = amount + 40
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_capture': 1 }
payment_response = client.order.create(data=data)
print(payment_response)
order_id = payment_response['id']
order_status = payment_response['status']
print(order_id)
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())
def payment_done(request):
order_id = request.GET.get('order_id')
payment_id = request.GET.get('payment_id')
cust_id = str(request.GET.get('cust_id'))
user = request.user
print("pid=",payment_id,"oid=",order_id)
#Payment.objects.create(razorpay_order_id=order_id, razorpay_payment_id=payment_id, cust_id=cust_id)
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
cart = Cart.objects.filter(user=user)
payment.save()
for c in cart:
OrderPlaced(user=user,customer=customer,product=c.product,quantity=c.quantity,payment=payment).save()
c.delete()
return redirect('orders')
我想通过GET方法获取订单ID、客户ID、支付ID等信息,并在完成支付后把这些信息存储到数据库里。
请帮我解决这个错误。
0 个回答
暂无回答