我正在从razorpay寻找 order_id 来保存在数据库中,如何在views.py中获取它以保存在数据库中。
razerpay成功完成付款,但我想取回 该order_id。
我遇到以下错误
模块'razorpay.client'没有属性'order'
app_name = "checkout"
urlpatterns = [
path('payment/', payment, name="payment"),
path('checkout-form', checkout, name='checkout-form'),
]
views.py
def checkout(request):
user = request.user
carts = Cart.objects.filter(user=user)
orders = Order.objects.filter(user=user, ordered=False)
order = orders[0]
amount = int(order.get_totals() * 100)
context = {
"carts": carts,
'order': order,
'amount': amount,
}
return render(request, 'checkout-form.html', context)
def payment(request):
order = Order.objects.get(user=request.user, ordered=False)
amount = int(order.get_totals() * 100)
if request.method == 'POST':
print(" request is post ")
order_amount = amount,
order_currency = "INR",
order_receipt = 'order_rcptid_11'
course = client.order.create(amount=order_amount,
currency=order_currency,
receipt=order_receipt,
payment_capture='0')
# Create the Payment
payment = Payment()
payment.razorpay_order_ID = course['id'][0]
payment.user = request.user
payment.amount = int(order.get_totals())
payment.save()
print("this is the post payment method")
else:
# order = Order.objects.get(user=request.user, ordered=False)
# context = {
# 'order': order
# }
print(" request is get")
return render(request, 'checkout-form.html')
return redirect('checkout:payment/')
<form action="{% url 'checkout:payment' %}" method="POST">
{% csrf_token %}
<script src="https://checkout.razorpay.com/v1/checkout.js"
data-key="######################"
data-amount="{{ amount }}"
data-currency="INR"
data-buttontext="Pay with Razorpay"
data-name="Acme Corp"
data-description="A Wild Sheep Chase is the third novel by Japanese author Haruki Murakami"
data-image="https://example.com/your_logo.jpg"
data-prefill.name="Gaurav Kumar"
data-prefill.email="gaurav.kumar@example.com"
data-prefill.contact="9999999999"
data-theme.color="#F37254" > </script>
<input type="hidden" custom="Hidden Element" name="hidden">
</form>
答案 0 :(得分:0)
Panwaryou have to pass
order id` 到您脚本中的 html 页面
def payment(request):
order = Order.objects.get(user=request.user, ordered=False)
amount = int(order.get_totals() * 100)
if request.method == 'POST':
print(" request is post ")
order_amount = amount,
order_currency = "INR",
order_receipt = 'order_rcptid_11'
course = client.order.create(dict(amount=order_amount,
currency=order_currency,
receipt=order_receipt,
payment_capture='0'))
context = {}
context['order_id'] = course['id']
return render(request, 'checkout-form.html',context)
else:
# order = Order.objects.get(user=request.user, ordered=False)
# context = {
# 'order': order
# }
print(" request is get")
return render(request, 'checkout-form.html')
return redirect('checkout:payment/')
并且在您的模板中,您必须将 order_id
提供给您的 razorpay
api
<form action="{% url 'checkout:payment_status' %}" method="POST">
{% csrf_token %}
<script src="https://checkout.razorpay.com/v1/checkout.js"
data-key="######################"
data-amount="{{ amount }}"
data-currency="INR"
data-buttontext="Pay with Razorpay"
data-name="Acme Corp"
data-order_id = {{ order_id }}
data-description="A Wild Sheep Chase is the third novel by Japanese author Haruki Murakami"
data-image="https://example.com/your_logo.jpg"
data-prefill.name="Gaurav Kumar"
data-prefill.email="gaurav.kumar@example.com"
data-prefill.contact="9999999999"
data-theme.color="#F37254" > </script>
<input type="hidden" custom="Hidden Element" name="hidden">
</form>
然后验证 payment_status
内的签名
def payment_status(request):
response = request.POST
params_dict = {
'razorpay_payment_id' : response['razorpay_payment_id'], # this you have to get from ajax call
'razorpay_order_id' : response['razorpay_order_id'],
'razorpay_signature' : response['razorpay_signature']
}
# VERIFYING SIGNATURE
try:
status = client.utility.verify_payment_signature(params_dict)
payment = Payment()
payment.razorpay_order_ID = course['id'][0]
payment.user = request.user
payment.amount = int(order.get_totals())
payment.save() # you canto save all the important details return by razorpay eg. `razorpay_payment_id`, `razorpay_signature`
return render(request, 'order_summary.html', {'status': 'Payment Successful'})
except:
return render(request, 'order_summary.html', {'status': 'Payment Faliure!!!'})
有关更多信息,请参阅此帖子 Integrating Razorpay with django