支付
集成 Stripe 实现结账、Webhook 和客户门户。
NextSaas 提供了完整的 Stripe 集成,包括定价插件系统、结账会话、Webhook 处理和客户门户。
设置
-
创建 Stripe 账户: 在 Stripe 注册。
-
获取 API 密钥: 从 Stripe 仪表板获取您的发布密钥 (Publishable Key) 和密钥 (Secret Key)。
-
配置环境:
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_..." STRIPE_SECRET_KEY="sk_test_..."
Webhooks
Webhooks 对于监听支付事件(例如 checkout.session.completed, invoice.paid)至关重要。
-
本地开发: 使用 Stripe CLI 将事件转发到您的本地实例。
stripe listen --forward-to localhost:3000/api/stripe/webhook将 CLI 输出中的 Webhook 签名密钥 (
whsec_...) 复制到您的.env文件中:STRIPE_WEBHOOK_SECRET="whsec_..." -
生产环境: 在您的 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_..."创建新插件
要添加新的定价模式(例如月度订阅):
-
在
src/lib/pricing/plugins/{name}/下创建新目录,包含以下文件:config.ts— 计划定价、功能和 Stripe IDi18n.ts—en和zh-CN的翻译component.tsx— 定价 UI 的服务器组件pricing-cta.tsx— 结账交互的客户端组件index.ts— 插件导出
-
在
src/lib/pricing/registry.ts中注册插件。 -
将新的 Stripe 环境变量添加到
src/env.ts。 -
在
.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;