python - 在 Razorpay 支付网关中,未获取 order_amount。我怎样才能得到金额?
问题描述
当我使用 Razorpay 支付网关进行支付集成时,没有从模型中获取 order_amount。正如在 models.py 中看到的,有两种方法可以获得订单的总金额,但是尝试其中任何一种,order_amount 都没有发送任何正确的值,因此我被困在这里好几天了。
请帮忙。谢谢你
以下是错误的回溯:
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\blink\myblink\onlineshopping\views.py", line 243, in payment
order_amount = order.get_total * 100
Exception Type: TypeError at /shoppe/payment/
Exception Value: unsupported operand type(s) for *: 'method' and 'int'
视图.py:
#Payment Integration - Razorpay
@login_required
def payment(request):
add = Address.objects.filter(default=True)
order = Order.objects.filter(user=request.user).first()
print(order) #order=admin
client = razorpay.Client(auth=("XXX", "YYY"))
if order.razorpay_order_id is None:
order_id = order.order_id
print(order_id) #order_id=1
order_amount = order.get_total * 100
print(order_amount)
order_currency = 'INR'
order_receipt = 'Rcpt'
data = {"id": order_id, "amount": order_amount, "currency": order_currency, "receipt": order_receipt, "payment_capture": '1'}
razorpay_order = client.order.create(data=data)
# Razorpay order inserted into database order
order.razorpay_order_id = razorpay_order["order_id"]
order.save()
else:
razorpay_order = client.order.fetch(order.razorpay_order_id)
return render(request, 'payment.html', {'razorpay_order': razorpay_order, 'add': add, 'order': order})
模型.py:
class Order(models.Model):
order_id = models.IntegerField(primary_key=True, null=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
items = models.ManyToManyField(OrderItem)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField(default=timezone.now)
ordered = models.BooleanField(default=False)
# shipping_address = models.ForeignKey(Address, on_delete=models.CASCADE)
# total_amount = models.FloatField(null=True)
#Related to Razorpay
razorpay_order_id = models.CharField(max_length=500, null=True, blank=True)
razorpay_payment_id = models.CharField(max_length=500, null=True, blank=True)
razorpay_signature = models.CharField(max_length=500, null=True, blank=True)
objects = models.Manager()
def __str__(self):
return self.user.username
def get_total(self):
total = 0
for order_item in self.items.all():
total += order_item.get_final_price()
return total
def get_amount(self):
return self.get_total()
解决方案
您必须将总价格字段更改为整数字段,如下所示
total_amount = models.IntegerField(null=True)
或在您的视图中将其更改为整数字段,然后将其乘以 100
total_price = request.POST.get('paying_price')
total_item_price = json.loads(total_price)#for changing float field into integers
然后
amount=total_item_price*100
因为 razorpay 无法将浮点字段理解为值,所以您必须根据需要更改它,这可能会有所帮助
推荐阅读
- css - 为什么只有某些字体真棒图标通过 css 出现?
- hyperledger-fabric - Hyperledger Composer 如何增加执行超时
- python - 如何在 python 中使用 libxml2 编写 xml 文件?
- javascript - 为什么数字出现在我的多维数组的末尾?
- linux - 编译 GNUTLS 给出 config.status:error: cannot find input file: 'guile/pre-inst-guile.in'
- javascript - 如何重置 setInterval 函数中的值?
- javascript - 应该在提交时执行的功能不起作用
- sql - 未找到访问更新 QueryDef 参数
- csvhelper - 使用 CsvHelper 读取管道分隔文件时出现问题
- javascript - 提交表单后如何在同一页面中获取成功消息?