这个问题以前在这里问过,但我没有50个声望点来继续讨论这个问题。
短版
本质上,问题归结为-我有一个外部URL发送POST数据到我的Django应用程序。我想访问这个POST数据,但Django给出403错误(CSRF令牌丢失)。
<<p>详细版本/strong>我正在尝试添加Razorpay的托管支付网关到我的Django项目。我已经将URL传递给回调函数中的以下函数。
如前面的答案所述,我尝试使用csrf_exempt
装饰器并在settings.py
文件中添加https://api.razorpay.com
URL作为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
标签,而不是在接受来自支付网关的请求的函数上。