Razozpay Integration with Django
Tags: django, python, razorpay
Published: 2021-01-04 08:25:22

To make use of razorpay in our application we are going to use this razorpay python package. We need to install it first.

```python
pip install razorpay
```
Once signup is complete, Make sure you are in test mode and not live mode. Visit Razorpay Dashboard and create new api keys.

The api keys are shown just once so, make sure you save it. Ok so, you have already put it in your settings file,good. Not Good !!! Secrets should remain secrets, either we should put them as environment variables or in a json file which we won't push to Github. 
Lets create an url, upon visiting which we should be provided with a Button, When we click on the button then we should be provided us with payment gateway screen.
But for this lets create our view first.

```python
import os
import razorpay

from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt


def payment(request):
	amount = 100 #100 here means 1 dollar,1 rupree if currency INR
	client = razorpay.Client(auth=(os.getenv('razorpaykey'), os.getenv('razorpaysecret')))
	response = client.order.create({'amount':amount,'currency':'USD','payment_capture':1})
	print(response)
	context = {'response':response}
	return render(request,"payments/payment.html",context)


@csrf_exempt
def payment_success(request):
	if request.method =="POST":
		print(request.POST)
		return HttpResponse("Done payment hurrey!")
```

This will be our HTML file and it will be responsible for getting a razozpay button which when click will generate the payment form.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/v17jxny1ma39y4d0kfj3.png)

```python
{% if response %}
<form action="/success/" method="POST">
    <script
        src="https://checkout.razorpay.com/v1/checkout.js"
        data-key="your_test_api_key"
        data-amount={{response.amount}}
        data-currency={{response.currency}}
        data-order_id={{response.id}}
        data-buttontext="Pay with Razorpay"
        data-name="ILoveDjango3000"
        data-description=""
        data-image=""
        data-prefill.name={{request.user.username}}
        data-prefill.email={{request.user.email}}
        data-theme.color="#F37254"
    ></script>
    <input type="hidden" custom="Hidden Element" name="hidden">
    </form>
{% endif %}
```
Hook up the views i.e. payment and payment_success with url of your choice, Make sure to update the HTML file form-action with your success url. One more thing is once payment is success, Razorpay will send a POST request to our application at success url. Since the form is not having csrf_token we can exempt csrf_token. It is advised that, we should make use of webhooks and then exempt csrf_token. 

This is an e.g. of my urls.py file:
```python
from django.urls import path

from apps.payments.views import payment,payment_success

urlpatterns = [
    path('payment/',payment,name="payment"),
    path('success/',payment_success,name="payment-success"),
]

```
This is a minimal configuration to get Razorpay to work with django. There are still things which needs to be improved or integrated e.g. Subscription, invoices, refunds, routes, and most important security and signature verification etc.

**I am planning to update more payment options e.g. paypal and instamojo :**
https://www.ilovedjango3000.com/blog/payment-in-django/