NextSaas
NextSaas
介绍快速开始配置数据库身份验证邮件国际化 (i18n)支付文件存储部署更新日志

支付

集成 Stripe 实现结账、Webhook 和客户门户。

NextSaas 提供了完整的 Stripe 集成,包括定价插件系统、结账会话、Webhook 处理和客户门户。

设置

  1. 创建 Stripe 账户: 在 Stripe 注册。

  2. 获取 API 密钥: 从 Stripe 仪表板获取您的发布密钥 (Publishable Key) 和密钥 (Secret Key)。

  3. 配置环境:

    NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_..."
    STRIPE_SECRET_KEY="sk_test_..."

Webhooks

Webhooks 对于监听支付事件(例如 checkout.session.completed, invoice.paid)至关重要。

  1. 本地开发: 使用 Stripe CLI 将事件转发到您的本地实例。

    stripe listen --forward-to localhost:3000/api/stripe/webhook

    将 CLI 输出中的 Webhook 签名密钥 (whsec_...) 复制到您的 .env 文件中:

    STRIPE_WEBHOOK_SECRET="whsec_..."
  2. 生产环境: 在您的 Stripe 仪表板中,前往 Developers > Webhooks,添加端点:https://your-domain.com/api/stripe/webhook,并选择 checkout.session.completed 和 customer.subscription.updated 等事件。

定价插件

NextSaas 使用定价插件系统来管理不同的定价模式。每个插件封装了自己的 UI、配置和翻译。

激活插件

通过环境变量设置活动插件:

NEXT_PUBLIC_PRICING_PLUGIN="lifetime"

可用插件

插件ID类型描述
终身会员lifetime一次性支付一次购买,永久拥有

产品配置

对于内置的终身会员插件,在 Stripe 中创建产品和价格,然后配置:

STRIPE_LIFETIME_PRODUCT_ID="prod_..."
STRIPE_LIFETIME_PRICE_ID="price_..."

创建新插件

要添加新的定价模式(例如月度订阅):

  1. 在 src/lib/pricing/plugins/{name}/ 下创建新目录,包含以下文件:

    • config.ts — 计划定价、功能和 Stripe ID
    • i18n.ts — en 和 zh-CN 的翻译
    • component.tsx — 定价 UI 的服务器组件
    • pricing-cta.tsx — 结账交互的客户端组件
    • index.ts — 插件导出
  2. 在 src/lib/pricing/registry.ts 中注册插件。

  3. 将新的 Stripe 环境变量添加到 src/env.ts。

  4. 在 .env 中设置 NEXT_PUBLIC_PRICING_PLUGIN=your-plugin 以激活。

结账流程

我们在 src/app/api/stripe/checkout/route.ts 提供了现成的结账 API。

要从客户端发起结账会话:

const response = await fetch("/api/stripe/checkout", {
  method: "POST",
  body: JSON.stringify({
    priceId: "price_...",
    successUrl: window.location.origin + "/dashboard",
    cancelUrl: window.location.origin + "/pricing",
  }),
});

const { url } = await response.json();
window.location.href = url;

国际化 (i18n)

使用 next-intl 为您的应用添加多语言支持。

文件存储

配置 S3 或本地文件系统存储。

On this page

设置Webhooks定价插件激活插件可用插件产品配置创建新插件结账流程