Интеграция платежного шлюза Razorpay с Django приводит к сбою проверки CSRF
Этот вопрос был задан ранее здесь, но у меня не было 50 очков репутации, чтобы продолжить обсуждение этого ответа.
Короткая версия
По сути, проблема сводится к следующему - у меня есть внешний URL, который отправляет POST-данные в мое приложение Django. Я хочу получить доступ к этим POST данным, но Django выдает 403 ошибку (CSRF Token missing).
Подробная версия
Я пытаюсь добавить Hosted Payment Gateway от Razorpay в мой проект Django. Я передал URL следующей функции в функции обратного вызова.
Как указано в предыдущем ответе, я попробовал использовать декоратор csrf_exempt и добавить URL https://api.razorpay.com как CSRF_TRUSTED_DOMAINS в файл settings.py, но проблема все еще остается. Я по-прежнему получаю ошибку 403 от Django, когда платеж проходит успешно.
@csrf_exempt
def course_purchase_callback(request):
payment_id = request.POST.get("razorpay_payment_id")
order_id = request.POST.get("razorpay_order_id")
signature = request.POST.get("razorpay_signature")
client = razorpay.Client(auth=(os.getenv("RZP_ID"), os.getenv("RZP_SECRET")))
verify = client.utility.verify_payment_signature({
"razorpay_payment_id": payment_id,
"razorpay_order_id": order_id,
"razorpay_signature": signature,
})
файл settings.py
..
..
..
CSRF_TRUSTED_ORIGINS = ["https://api.razorpay.com"]
..
..
Используемые версии:
- Django = 4.0.3
- Razorpay API = 1.3.0
Что я здесь упускаю?
Ну, этот вопрос был решен некоторое время назад.
Решением было добавить тег @csrf_exempt в функцию, которая инициировала запрос к шлюзу Razorpay, а не в функцию, которая принимала запрос от платежного шлюза.