【问题标题】:Integrating Razorpay Payment Gateway with Django causing CSRF verification failure将 Razorpay 支付网关与 Django 集成导致 CSRF 验证失败
【发布时间】:2022-06-22 13:24:08
【问题描述】:

之前有人问过这个问题here,但我没有 50 点声望点来继续讨论这个答案本身。

短版

基本上,问题归结为 - 我有一个将 POST 数据发送到我的 Django 应用程序的外部 URL。我想访问这个 POST 数据,但 Django 给出 403 错误(缺少 CSRF 令牌)。

详细版

我正在尝试将 Razorpay 的 Hosted Payment Gateway 添加到我的 Django 项目中。我已将 URL 传递给回调功能中的以下函数。

如上一个答案中所述,我尝试使用csrf_exempt 装饰器并将https://api.razorpay.com URL 添加为CSRF_TRUSTED_DOMAINSsettings.py 文件中,但问题仍然存在。付款成功后,我仍然收到 Django 的 403 错误。

@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

我在这里缺少什么?

【问题讨论】:

  • 你好@Japkeerat Singh 我的意思是你能提供你的回调网址

标签: python django razorpay


【解决方案1】:

嗯,这个问题不久前就解决了。

解决方案是在向 Razorpay 网关发起请求的函数上添加 @csrf_exempt 标签,而不是在接受来自支付网关的请求的函数上。

【讨论】:

    【解决方案2】:

    知道为什么我们需要在请求发起函数而不是接收函数上添加@csrf_exempt标签吗?

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 1970-01-01
      • 2020-10-23
      • 2016-01-19
      • 2020-09-26
      • 2017-02-28
      • 2020-04-16
      • 2011-12-30
      • 2017-01-07
      相关资源
      最近更新 更多