用途:为 Convex 应用接入 Stripe 订阅计费,包括创建结账会话、接收 Stripe webhook、保存订阅状态,并在服务端基于订阅状态做访问控制。
主要能力:
- 结账 action:createSubscriptionCheckout 读取当前用户身份,获取或创建 Stripe 客户,并按指定 priceId 创建订阅模式结账会话,返回 sessionId 与 url。
- 自动校验的 webhook:通过 @convex-dev/stripe 的 registerRoutes 在 /stripe/webhook 注册路由,组件内部处理签名校验,无需手写 constructEvent。
- 订阅状态存储:订阅信息保存在组件表中,可通过 components.stripe.public.listSubscriptionsByUserId 查询。
- 服务端订阅拦截:isSubscribed 查询根据用户订阅状态是否为 active 或 trialing 返回布尔值,用于服务端门控,而非依赖客户端声明。
使用方式: 安装组件:npm install @convex-dev/stripe。 创建 convex/convex.config.ts,从 '@convex-dev/stripe/convex.config.js' 导入并 app.use(stripe)。 在 Convex 环境变量中配置 STRIPE_SECRET_KEY 与 STRIPE_WEBHOOK_SECRET。 创建 convex/http.ts,使用 registerRoutes(http, components.stripe, { webhookPath: '/stripe/webhook' }) 注册路由。 创建 convex/billing.ts,定义结账 action 与订阅查询。 运行 npx convex dev --once 安装组件并推送函数,确认输出包含已安装 stripe 组件。 在 Stripe Dashboard 添加 webhook 端点 https://<deployment>.convex.site/stripe/webhook,订阅 checkout.session.completed、customer.subscription.、invoice.、payment_intent.* 事件,并将签名密钥写入 STRIPE_WEBHOOK_SECRET。
适用场景:Convex 应用需要接入 Stripe 订阅付费、在服务端校验用户是否处于有效订阅状态以限制功能访问的场景。
限制与注意事项:资料未提供价格、套餐或效果数据;需使用 @convex-dev/stripe(npm: @convex-dev/stripe@^0.1.4);convex.config.ts 必须导入 .js 扩展名;不要手写 constructEvent webhook;Stripe 密钥只存放在 Convex 环境变量中;订阅判断应基于服务端存储状态。