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

Django+Stripe项目订单支付接口404错误排查求助

订单购买404错误排查与修复

直接原因:URL路径不匹配

你的404错误核心原因是路由定义与请求路径的尾斜杠不匹配:

  • 在urls.py中,订单结算路由定义为:
    path('order_checkout/<int:order_id>', CreateCheckoutSessionOrderView.as_view(), name='order_checkout'),
    
    该路径不带尾斜杠(示例:/order_checkout/1)。
  • 但模板JS中的请求路径是带尾斜杠的:
    fetch('/order_checkout/' + orderId)
    
    实际请求地址为/order_checkout/1/,与路由规则不匹配,导致404。

修复方法(二选一,推荐第一种)

  1. 给路由规则添加尾斜杠,与请求路径统一:
    path('order_checkout/<int:order_id>/', CreateCheckoutSessionOrderView.as_view(), name='order_checkout'),
    
  2. 修改模板中的fetch路径,去掉尾斜杠:
    fetch('/order_checkout' + orderId)
    

其他潜在问题修复

除了404,代码还有几处细节需要修正,避免后续功能异常:

1. Stripe会话订单名称错误

CreateCheckoutSessionOrderView中,product_data.name赋值的是函数对象而非字符串,需调用__str__方法:

'name': str(order),  # 或 order.__str__()

2. 订单总价计算逻辑错误

当前Order.get_total_cost()未考虑OrderItem中的购买数量,应改为基于OrderItem的总价计算:

def get_total_cost(self):
    return sum(item.get_cost() for item in self.order_items.all())

3. 避免数据库查询异常

CreateCheckoutSessionOrderView中用Order.objects.get(id=order_id)会在订单不存在时抛出异常,替换为get_object_or_404更安全:

from django.shortcuts import get_object_or_404

# ...
order = get_object_or_404(Order, id=order_id)

内容的提问来源于stack exchange,提问作者Alan Dzheliev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:43:13