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

Django部署Heroku后Stripe订阅服务报500错误求助

Heroku部署后Django-Stripe订阅服务500错误排查求助

本地环境下Django集成的Stripe订阅服务运行正常,但部署到Heroku后,点击「支付」按钮始终触发Internet Error 500。查看Heroku基础日志未发现明显连接或服务异常,多次重新部署后问题依旧。

Heroku日志详情

2024-03-19T08:03:27.576123+00:00 heroku[router]: at=info method=POST path="/checkout/" host=nagoyameshi-marina-32890ff7fdd2.herokuapp.com request_id=40d9d9e5-8ebf-436f-9254-2e862dcada7e fwd="126.15.11.7" dyno=web.1 connect=2ms service=19ms status=500 bytes=459 protocol=https
2024-03-19T08:03:27.576163+00:00 app[web.1]: 10.1.20.255 - - [19/Mar/2024:17:03:27 +0900] "POST /checkout/ HTTP/1.1" 500 145 "https://nagoyameshi-marina-32890ff7fdd2.herokuapp.com/terms_of_service/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"

相关代码片段

settings.py 中Stripe配置

if "STRIPE_PUBLISHABLE_KEY" in os.environ and "STRIPE_API_KEY" in os.environ and "STRIPE_PRICE_ID" in os.environ:
    STRIPE_PUBLISHABLE_KEY  = os.environ["STRIPE_PUBLISHABLE_KEY"]
    STRIPE_API_KEY          = os.environ["STRIPE_API_KEY"]
    STRIPE_PRICE_ID         = os.environ["STRIPE_PRICE_ID"]

views.py 中CheckoutView代码

stripe.api_key  = settings.STRIPE_API_KEY

class CheckoutView(LoginRequiredMixin,View):
    def post(self, request, *args, **kwargs):
        checkout_session =stripe.checkout.Session.create(
            line_items=[
                {
                    'price':settings.STRIPE_PRICE_ID,
                    'quantity':1,
                },
            ],
            payment_method_types=['card'],
            mode='subscription',
            success_url=request.build_absolute_uri(reverse_lazy("nagoyameshi:success")) + '?session_id={CHECKOUT_SESSION_ID}',
            cancel_url=request.build_absolute_uri(reverse_lazy("nagoyameshi:index")),
        )

print( checkout_session["id"] )
return redirect(checkout_session.url)

checkout    = CheckoutView.as_view()

数据库使用Heroku Postgres,请求排查500错误原因。

排查建议

  • 验证环境变量完整性:登录Heroku控制台,检查STRIPE_PUBLISHABLE_KEY、STRIPE_API_KEY、STRIPE_PRICE_ID是否已正确设置,无拼写错误。注意区分测试密钥与生产密钥,确保STRIPE_PRICE_ID与当前API密钥环境(测试/生产)匹配。
  • 获取Django详细错误日志:临时在Heroku设置DEBUG=True(仅测试用,生产环境需关闭),或在settings.py中配置日志记录,将Django的异常详情输出到Heroku日志,以便定位具体错误(比如Stripe API调用报错、变量未加载等)。
  • 检查Stripe API访问有效性:在Heroku控制台执行命令curl https://api.stripe.com/v1/prices/[你的STRIPE_PRICE_ID] -u [你的STRIPE_API_KEY]:,验证是否能正常获取价格信息,确认API密钥权限及网络连通性。
  • 检查回调URL合法性:Stripe要求success_url和cancel_url必须为HTTPS(本地测试除外),确认request.build_absolute_uri生成的URL为HTTPS格式,且路径正确。
  • 排查代码潜在问题:确认视图中已正确导入settings,reverse_lazy在POST方法中使用是否存在异常;移除生产环境中的print语句,避免输出缓冲区问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:09:54