将Razorpay Payment Gateway与Django集成导致CSRF验证失败



这个问题以前在这里问过,但我没有50个声望点来继续讨论这个问题。

短版

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

<<p>

详细版本/strong>我正在尝试添加Razorpay的托管支付网关到我的Django项目。我已经将URL传递给回调函数中的以下函数。

如前面的答案所述,我尝试使用csrf_exempt装饰器并在settings.py文件中添加https://api.razorpay.comURL作为CSRF_TRUSTED_DOMAINS,但问题仍然存在。当付款成功时,我仍然得到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

我在这里缺少的是什么?

这个问题已经解决了。

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

最新更新