这个问题以前曾问过https://stackoverflow.com/questions/69886006/razorpay-django-integration-with-callback-url-csrf-token-missing-or-incorrect,但我没有50个口碑点来继续讨论这个答案本身。
短版
本质上,问题归结为-我有一个外部URL,它将POST数据发送给我的Django应用程序。我想访问这个帖子数据,但是Django提供了403错误(CSRF令牌丢失)。
详细版本
我试图将Razorpay的托管支付网关添加到我的Django项目中。我已经将URL传递给回调功能中的以下函数。
正如前面的答案所指定的,我尝试使用csrf_exempt
装饰器并将https://api.razorpay.com
URL作为CSRF_TRUSTED_DOMAINS
添加到settings.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"]
..
..
正在使用的版本:
我在这里错过了什么?
发布于 2022-05-27 02:24:46
这个问题早就解决了。
解决方案是在启动请求的函数上添加@csrf_exempt
标记到Razorpay网关,而不是接收来自支付网关的请求的函数。
https://stackoverflow.com/questions/72097413
复制相似问题