Интеграция платежного шлюза 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, а не в функцию, которая принимала запрос от платежного шлюза.

Вернуться на верх