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

Stripe客户门户无法读取session变量,报UnboundLocalError错误

问题原因

你遇到的UnboundLocalError是因为在customer_portal函数中,先引用了session['account_name'],但后续又重新赋值了session变量:

session = stripe.billing_portal.Session.create(...)

Python会将函数内的session视为局部变量,所以在函数开头访问session['account_name']时,局部的session还未被定义,就触发了这个错误。

解决方案

最安全且清晰的做法是重命名Stripe返回的会话变量,避免和Flask的session上下文变量冲突:

@auth.route('/create-customer-portal-session', methods=['GET', 'POST'])
def customer_portal():
    # 这里使用的是Flask的session上下文变量
    getting = db.child('users').child(session['account_name']).get()
    getting = json.loads(json.dumps(getting.val()))

    # 重命名为stripe_session,避免冲突
    stripe_session = stripe.billing_portal.Session.create(
        customer=getting['customer_id'],
        return_url=YOUR_DOMAIN,
    )
    print(stripe_session.url)
    return redirect(stripe_session.url, code=303)

如果一定要保留session作为变量名,也可以显式声明使用全局的session(不推荐,可能引发上下文问题):

@auth.route('/create-customer-portal-session', methods=['GET', 'POST'])
def customer_portal():
    global session  # 声明使用全局session变量
    getting = db.child('users').child(session['account_name']).get()
    getting = json.loads(json.dumps(getting.val()))

    session = stripe.billing_portal.Session.create(
        customer=getting['customer_id'],
        return_url=YOUR_DOMAIN,
    )
    print(session.url)
    return redirect(session.url, code=303)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:54:57