You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django接收RazorpayX Webhook时获取空QueryDict求助

Django对接RazorpayX Webhook获取空QueryDict的解决办法

问题核心原因:RazorpayX Webhook发送的是JSON格式请求体,而非表单编码数据,Django的request.POST仅能解析application/x-www-form-urlencoded类型的请求,所以会得到空的QueryDict。

解决步骤

1. 正确解析JSON请求体

直接读取request.body并解析为JSON字典,替换原来的request.POST用法:

import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def RazorWebhook(request):
    if request.method == 'POST':
        # 解码并解析JSON请求体
        payload = json.loads(request.body.decode('utf-8'))
        print('webhook payload=============', payload)
        # 这里添加你的业务逻辑,比如更新订单状态等
    # Webhook只需返回200状态码,无需返回页面
    return HttpResponse(status=200)

2. 必须验证Webhook签名(关键)

为了防止伪造请求,一定要验证Razorpay发送的签名,步骤如下:

  • 先安装razorpay官方库:pip install razorpay
  • 替换代码为带签名验证的版本:
import json
import razorpay
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def RazorWebhook(request):
    if request.method == 'POST':
        # 替换为你的Razorpay密钥和Webhook密钥
        client = razorpay.Client(auth=("你的KEY_ID", "你的KEY_SECRET"))
        webhook_secret = "你的WEBHOOK_SECRET"
        
        try:
            # 验证签名合法性
            client.utility.verify_webhook_signature(
                request.body,
                request.headers.get('X-Razorpay-Signature'),
                webhook_secret
            )
            # 验证通过后解析payload
            payload = json.loads(request.body.decode('utf-8'))
            print('合法的Webhook数据:', payload)
            # 处理业务逻辑
        except razorpay.errors.SignatureVerificationError:
            print('签名验证失败,请求非法')
            return HttpResponse(status=403)
    return HttpResponse(status=200)

3. 额外检查项

  • 确认Razorpay后台配置的Webhook URL和你的ngrok地址完全一致,且勾选了需要监听的事件(如付款成功、失败等);
  • 确保视图返回200状态码,Razorpay若未收到成功响应会重复发送请求;
  • 不要使用render返回页面,Webhook不需要前端页面,返回空的成功响应即可。

内容的提问来源于stack exchange,提问作者Love dazzell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:40:33