#python #django #razorpay
Вопрос:
Я пытаюсь использовать представление на основе классов с помощью Razor Pay, все работает отлично. Но когда я публикую данные тоже в том же виде, это выдает ошибку Forbidden (CSRF token missing or incorrect.): /buy-coin
.
У меня здесь два вопроса
- Как мы можем освободить токен CSRF для метода post
- В коде Javascript Razorpay мы можем добавить
csrf
токен в URL обратного вызова.
Ссылка на интеграцию с Razorpay Python — https://razorpay.com/docs/payment-gateway/server-integration/python /
View.py
class BuyCoinPageView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
client = razorpay.Client(auth=("scretKey", "secretKey"))
data = { "amount": 10000, "currency": "INR", "receipt": "order_rcptid_11" }
payment = client.order.create(data=data)
print('Razor Pay - ', payment['id'])
return render(request, "pricing-page.html", {'payment': payment})
def post(self, request, *args, **kwargs):
data = request.POST
print(data)
return render(request, "pricing-page.html")
HTML-ФАЙЛ
<a href="#" id="rzp-button1" class="btn-buy">Buy Now</a>
<script src="https://checkout.razorpay.com/v1/checkout.js"></script>
<script>
var options = {
"key": "rzp_test_hwAkAHZlKJdgee", // Enter the Key ID generated from the Dashboard
"amount": "50000", // Amount is in currency subunits. Default currency is INR. Hence, 50000 refers to 50000 paise
"currency": "INR",
"name": "Acme Corp",
"description": "Test Transaction",
"image": "https://example.com/your_logo",
"order_id": "{{payment.id}}", //This is a sample Order ID. Pass the `id` obtained in the response of Step 1
"callback_url": "{% url 'buy_coin' %}",
"prefill": {
"name": "Gaurav Kumar",
"email": "gaurav.kumar@example.com",
"contact": "9999999999"
},
"notes": {
"address": "Razorpay Corporate Office"
},
"theme": {
"color": "#3399cc"
}
};
var rzp1 = new Razorpay(options);
document.getElementById('rzp-button1').onclick = function(e){
rzp1.open();
e.preventDefault();
}
</script>
Журналы терминала —
[08/Nov/2021 15:22:12] "GET /static/assets/css/style.css HTTP/1.1" 200 27172
[08/Nov/2021 15:22:12] "GET /media/exam-logos/Java-logo.jpg HTTP/1.1" 200 38915
Razor Pay - order_IJ9ngRpV19pdEc
[08/Nov/2021 15:22:16] "GET /buy-coin HTTP/1.1" 200 8478
Forbidden (CSRF token missing or incorrect.): /buy-coin
[08/Nov/2021 15:22:37] "POST /buy-coin HTTP/1.1" 403 2519
Ответ №1:
напишите функцию для вашего обратного вызова и выполните исключение csrf
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def razorpay_call_back(request):
"write your code here"