Django跳转Paystack支付网关checkout页面出现KeyError如何解决
核心错误原因
从你给出的Paystack返回结构可以看到,authorization_url是嵌套在data字段下的二级字段,你直接从响应根层级取response_data["authorization_url"],路径不对就会触发KeyError。同时你写的Django视图没有return redirect对象,就算字段取对也不会完成跳转。
具体排查修复步骤
- 先校验API请求是否成功
拿到响应后优先判断HTTP状态码和返回的业务状态,避免请求本身失败的情况下强行取字段:res = requests.post(url, data=json.dumps(data), headers=headers) response_data = res.json() # 先打印完整响应内容,方便排查所有错误 print("Paystack完整返回:", response_data) # 校验请求是否成功 if res.status_code != 200 or not response_data.get("status"): return HttpResponse(f"支付初始化失败:{response_data.get('message', '未知错误')}") - 修正字段访问路径和视图返回逻辑
按照返回结构取二级字段,同时给redirect加上return:auth_url = response_data["data"]["authorization_url"] print(auth_url) return redirect(auth_url) - 核对请求参数合法性
- 不要填反公钥和密钥,
Authorization头里的SECRET_KEY要和Paystack后台配置一致 - 确认参数名符合Paystack接口要求,比如回调地址的参数名通常是
callback_url而非你写的callback - 金额单位为分,如果你要收1元,要传100,不需要补多余的前导0
- 不要填反公钥和密钥,
- 本地测试适配
本地用127.0.0.1作为回调地址会被Paystack拦截,测试时可以用内网穿透工具把本地服务暴露到公网,换成公网可访问的回调地址。
内容的提问来源于stack exchange,提问作者spiritman
相关产品推荐
相关产品推荐

