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

Django集成Stripe支付报错:AttributeError: 'str'对象无'get'属性

Django集成Stripe沙箱支付:AttributeError 解决指南

错误原因解析

  1. Stripe API参数非法:line_items里的price字段不能直接填写金额'20',Stripe要求这里必须是沙箱后台创建的价格ID(格式如price_xxxxxxxxxx)。直接填金额会触发Stripe API异常,进入except块。
  2. 视图返回值不符合Django要求:异常捕获时直接返回str(e)字符串,而Django视图必须返回HttpResponse或其子类对象。返回纯字符串会导致框架后续处理时尝试调用get方法,从而抛出AttributeError: 'str' object has no attribute 'get'。

修复方案

步骤1:获取正确的Stripe价格ID

  • 登录Stripe沙箱控制台,创建一个金额为20的价格对象(对应币种根据需求选择)。
  • 复制生成的价格ID(示例:price_1O0XyZabcdefGHIjklmnop)。

步骤2:修正views.py代码

def checkoutsession(request):
    # 确保已设置Stripe API密钥
    stripe.api_key = 'sk_test_你的沙箱密钥'
    
    try:
        checkout_session = stripe.checkout.Session.create(
            line_items=[
                {
                    # 替换为你刚创建的价格ID
                    'price': 'price_1O0XyZabcdefGHIjklmnop',
                    'quantity': 1,
                },
            ],
            mode='payment',
            success_url='http://localhost:3000/success.html',
            cancel_url='http://localhost:3000/cancel.html',
        )
    except Exception as e:
        # 用HttpResponse包装错误信息,返回400状态码
        return HttpResponse(str(e), status=400)

    # 303状态码用于重定向到Stripe支付页面
    return HttpResponse(checkout_session.url, status=303)

步骤3:验证前端表单

你的HTML表单已正确包含CSRF令牌和POST请求配置,无需修改。确保表单提交路径/checkoutsession与urls.py中的路由配置一致。

额外检查项

  • 确认Stripe沙箱密钥已正确配置,避免因权限问题导致API调用失败。
  • 测试时使用Stripe提供的沙箱测试卡号(如4242 4242 4242 4242)完成支付流程。

内容的提问来源于stack exchange,提问作者Abdul Moiz Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:52:48