Django集成Stripe支付报错:AttributeError: 'str'对象无'get'属性
Django集成Stripe沙箱支付:AttributeError 解决指南
错误原因解析
- Stripe API参数非法:
line_items里的price字段不能直接填写金额'20',Stripe要求这里必须是沙箱后台创建的价格ID(格式如price_xxxxxxxxxx)。直接填金额会触发Stripe API异常,进入except块。 - 视图返回值不符合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
相关产品推荐
相关产品推荐

