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

Django集成Stripe Checkout时视图未返回HttpResponse错误如何解决

问题原因
  • 核心触发原因:当前报错的请求方法是GET,但你的视图仅对POST请求做了逻辑处理,当请求为GET时,函数没有匹配的分支返回任何响应对象,默认返回None,触发Django的校验报错。
  • 隐藏问题1:异常捕获分支直接返回字符串str(e),不符合Django视图必须返回HttpResponse子类对象的要求,后续触发异常时也会报错。
  • 隐藏问题2:cancel_url配置中错误调用了不存在的方法request.build_absolute_url,正确方法名是request.build_absolute_uri,实际请求时会触发属性错误。
修复代码
from django.http import HttpResponse, HttpResponseNotAllowed
from django.shortcuts import redirect
import stripe
import os
from .models import Cart
from django.urls import reverse

def create_checkout_session(request):
    MY_DOMAIN = 'localhost:8000'
    # 非POST请求直接返回405方法不允许
    if request.method != 'POST':
        return HttpResponseNotAllowed(['POST'])
    try:
        cart = Cart.objects.filter(order_user=request.user)
        stripe.api_key = os.environ.get('stripeAPI')
        checkout_session = stripe.checkout.Session.create(
            line_items=[
                {
                    'price': 'price_1JUTtYIXuOafNhy8tmWVwgjG',
                    'quantity': 1,
                },
            ],
            payment_method_types=[
            'card',
            'p24',
            ],
            mode='payment',
            success_url=request.build_absolute_uri(reverse('success-page'))+ '?session_id={CHECKOUT_SESSION_ID}',
            # 修正方法名错误
            cancel_url= request.build_absolute_uri(reverse('cancel-page')),
        )
    except Exception as e:
        # 改为返回HttpResponse对象
        return HttpResponse(str(e), status=500)
    return redirect(checkout_session.url, code=303)
注意事项
  1. 后续访问该接口需要通过表单提交或者前端发起POST请求,不要直接在地址栏输入地址访问(地址栏访问默认是GET请求)。
  2. 请确保运行环境中正确配置了stripeAPI的环境变量,否则会触发鉴权异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:24:01