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

Django报错:byte indices must be integers or slices, not str及元数据获取问题

问题解决方案

问题1:修复"byte indices must be integers or slices, not str"错误

request.body返回的是字节类型的原始请求体,不是可直接用字符串键访问的字典。你需要先把它解析成JSON格式的字典,修改webhook代码如下:

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

@csrf_exempt
@require_http_methods(['POST', 'GET'])
def webhook(request):
    if request.method == 'POST':
        # 将字节请求体解析为JSON字典
        payload = json.loads(request.body)
        # 先判断字段是否存在,避免触发KeyError
        if 'meta' in payload.get('data', {}):
            order_id = payload['data']['meta']['order_id']
            print(order_id)
        return HttpResponse("testing...")

问题2:webhook payload中缺少meta字段的问题

是的,必须在收到的payload里存在meta字段,才能获取到你发送的元数据。当前支付网关(Flutterwave)没有回传你提交的meta数据,你可以从这几个方向排查:

  • 核对Flutterwave官方文档:确认你使用的支付接口是否支持在webhook回调中返回自定义meta字段,部分网关会把meta嵌套在data对象下,而非根层级。
  • 检查请求参数格式:你在process_payment里提交的meta字段是否符合Flutterwave的要求,比如拼写、嵌套结构是否正确。
  • 测试环境限制:如果用的是Flutterwave测试环境,可能部分自定义字段不会被返回,可切换到生产环境测试,或联系网关技术支持确认。

临时替代方案:你可以用tx_ref关联订单——你生成的tx_ref是唯一值,webhook返回的data.tx_ref能拿到这个值,提前把tx_ref和order_id存在数据库,收到webhook时通过tx_ref查询对应的order_id即可。

内容的提问来源于stack exchange,提问作者Destiny Franks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:40:38