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
相关产品推荐
相关产品推荐

