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
相关产品推荐
相关产品推荐

