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

如何通过Stripe实现支付后跳转至仅付费可访问的安全URL?

解决Stripe支付后仅付费用户可访问URL的配置方案

核心逻辑

不能直接将付费内容页面设为支付成功的跳转目标,必须在用户访问该页面时验证其真实支付状态,仅Stripe确认完成支付的用户才能获取内容。

具体实现步骤

1. 调整支付成功后的跳转目标

支付完成后,先跳转至中间页(比如你的“感谢页”),而非直接暴露付费内容URL。在中间页引导用户触发验证流程,再进入付费内容页。

2. 配置Stripe Webhook接收支付成功事件

  • 在Stripe控制台启用checkout.session.completed Webhook,设置你的后端接收地址,用于接收支付完成的官方通知。
  • 收到Webhook事件后,在后端数据库中记录该用户(或支付会话ID)的付费状态,标记为“已完成支付”。

3. 付费内容页的访问验证机制

当用户尝试访问付费内容URL时,后端执行以下验证:

  • 获取用户标识:可以是登录态的用户ID,或是从请求参数/Cookie中获取的支付会话ID。
  • 验证支付状态:要么调用Stripe API stripe.checkout.sessions.retrieve(session_id) 确认会话的payment_status为paid,要么查询本地数据库中存储的付费记录。
  • 验证通过则返回付费内容;验证失败则重定向至支付页面或提示未付费。

4. 可选:生成带签名的临时访问URL

若无需用户登录,可通过后端生成带签名的临时URL:

  • 收到Stripe支付成功通知后,后端生成包含过期时间和签名的付费内容URL(比如用JWT签名实现)。
  • 将该临时URL返回给前端,用户访问时后端验证签名有效性和过期时间,通过才允许访问。

关键代码示例(后端伪代码)

import stripe

stripe.api_key = "你的Stripe密钥"

def verify_payment(session_id):
    try:
        session = stripe.checkout.Session.retrieve(session_id)
        return session.payment_status == "paid"
    except stripe.error.StripeError:
        return False

# 付费内容页路由处理
def serve_paid_content(request):
    session_id = request.GET.get("session_id")
    if not session_id or not verify_payment(session_id):
        return redirect("/payment")
    # 返回付费内容页面
    return render("paid_content.html")

重要注意事项

  • 绝对不要信任前端传递的支付状态,必须通过后端对接Stripe或本地存储的付费记录验证。
  • Webhook必须配置签名验证,防止伪造的支付成功通知。
  • 临时URL需设置合理过期时间,避免链接被长期滥用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:20