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

如何将Stripe集成到我的Streamlit应用中且无需使用AWS服务?

无需AWS服务即可完成整个功能实现,所有逻辑可依托现有Heroku部署环境+Stripe原生接口完成,不需要额外云服务依赖

前置准备工作
  • 注册Stripe账号,完成商户身份验证,获取两类密钥:可公开的Publishable key,和仅后端使用的Secret key,注意不可泄露Secret key
  • 在Stripe后台创建一次性付款产品,设置对应收费金额,获取该产品的Price ID
  • 确认你的Heroku Streamlit应用的公网访问地址,用于后续付款成功回调
现有Streamlit代码调整步骤

首先在你的requirements.txt中新增两个依赖包:

stripe==6.0.0
streamlit-javascript==0.1.5

再按照如下结构调整你的应用代码,原有核心功能逻辑不需要修改,仅需要在外层加支付校验逻辑即可:

import streamlit as st
import stripe
from streamlit_javascript import st_javascript

# 从环境变量读取密钥,禁止硬编码到代码中
stripe.api_key = st.secrets["STRIPE_SECRET_KEY"]
PUBLISHABLE_KEY = st.secrets["STRIPE_PUBLISHABLE_KEY"]
PRICE_ID = st.secrets["STRIPE_PRICE_ID"]
# 替换为你自己的Heroku应用地址
YOUR_APP_URL = "https://你的应用名.herokuapp.com"

# 校验支付有效性函数
def check_payment_valid(session_id):
    try:
        session = stripe.checkout.Session.retrieve(session_id)
        return session.payment_status == "paid"
    except:
        return False

# 初始化会话状态存储支付信息
if "payment_passed" not in st.session_state:
    st.session_state.payment_passed = False
if "pay_session_id" not in st.session_state:
    st.session_state.pay_session_id = None

# 处理支付成功后的回调校验
query_params = st.experimental_get_query_params()
if "session_id" in query_params and not st.session_state.payment_passed:
    s_id = query_params["session_id"][0]
    if check_payment_valid(s_id):
        st.session_state.payment_passed = True
        st.session_state.pay_session_id = s_id

# 未付款用户仅展示支付入口
if not st.session_state.payment_passed:
    st.title("请完成付款后使用功能")
    if st.button("前往支付"):
        # 创建Stripe结账会话
        checkout_session = stripe.checkout.Session.create(
            payment_method_types=["card"],
            line_items=[{"price": PRICE_ID, "quantity": 1}],
            mode="payment",
            success_url=YOUR_APP_URL + "?session_id={CHECKOUT_SESSION_ID}",
            cancel_url=YOUR_APP_URL,
        )
        # 跳转至Stripe付款页面
        st_javascript(f"window.location.href = '{checkout_session.url}'")
    st.stop()

# 原有应用核心逻辑放在此处,仅付款完成用户可访问
# 以下为你原来的Excel上传、数据分析、下载生成逻辑,不需要修改
st.title("Excel数据分析工具")
uploaded_file = st.file_uploader("上传待处理Excel文件", type="xlsx")
# 原有逻辑保持不变即可
Heroku部署配置
  • 进入你的Heroku应用后台,打开Settings页面,找到Config Vars配置项
  • 新增三个环境变量,对应你之前获取的Stripe信息:
    • 变量名STRIPE_SECRET_KEY,值为你的Stripe私钥
    • 变量名STRIPE_PUBLISHABLE_KEY,值为你的Stripe公钥
    • 变量名STRIPE_PRICE_ID,值为你创建的付款产品的Price ID
  • 提交修改后重新部署应用即可生效
防盗用加固建议
  • 不要将代码仓库权限开放给对应企业,所有部署操作由你自己完成
  • 可以在支付校验逻辑中新增设备标识记录,同一个付款生成的session_id最多允许3台设备访问,避免企业购买一次后多人共用
  • 可以新增使用次数限制,比如单次购买最多支持处理100个Excel文件,超过需要额外付费,进一步控制被盗用的损失
  • 定期查看Stripe的付款记录,发现异常扩散可以直接在Stripe后台作废对应会话,禁止其继续访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:45:03