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

