如何在Razor Pay付款网关中获取order_id?

时间:2020-01-30 07:39:22

标签: django payment-gateway razorpay

我正在从razorpay寻找 order_id 来保存在数据库中,如何在views.py中获取它以保存在数据库中。

razerpay成功完成付款,但我想取回 该order_id。

我遇到以下错误

模块'razorpay.client'没有属性'order'

urls.py

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/')

checkout.html

<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>

enter image description here

1 个答案:

答案 0 :(得分:0)

Panwaryou have to passorder 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

相关问题