Larasonic Stripe订阅计费完整教程:从零设计双定价计划并接入Billing Portal
【免费下载链接】larasonic-vueThe Ultimate Laravel Starter Kit for Modern SaaS (VILT) with Shadcn Components (Vue, Inertia & Shadcn)项目地址: https://gitcode.com/gh_mirrors/la/larasonic-vue
本文带你使用开源 Laravel SaaS 起步套件Larasonic(Vue + Inertia + TypeScript 的 VILT 技术栈)完成一套完整的Stripe 订阅计费:从零设计 Basic 与 Pro 双定价计划,并一键接入 Stripe Billing Portal,让用户自助管理订阅与支付方式。
🚀 为什么选择 Larasonic 做 Stripe 订阅项目?
Larasonic 将 SaaS 商业化最繁琐的部分全部预先做完了:
| 能力 | 说明 |
|---|---|
| 💳 支付就绪 | 内置 Laravel Cashier,开箱即用 Stripe 订阅与计费 |
| 🔐 高级认证 | Fortify + Jetstream:OAuth、魔法链接、两步验证 |
| 🎨 现代前端 | Vue 3 + Inertia + Shadcn 风格组件,无需写 API |
| 📊 管理后台 | 集成 FilamentPHP 与 Telescope 监控 |
| 🐳 生产就绪 | 附 Dockerfile,一键容器化部署 |
⚡ 快速上手:5 分钟配置 Stripe 订阅环境
1. 获取项目源码
git clone https://gitcode.com/gh_mirrors/la/larasonic-vue cd larasonic-vue composer install && npm install php artisan migrate2. 配置 Stripe 环境变量
在.env文件中填入 Stripe 后台( Developers → API Keys)获取的密钥:
STRIPE_KEY=pk_live_xxx # 发布密钥(前端 Stripe.js 使用) STRIPE_SECRET=sk_live_xxx # 秘密密钥(后端 API 使用) STRIPE_WEBHOOK_SECRET=whsec_xxx # Webhook 签名密钥(防伪造请求)💡 小贴士:Cashier 配置项billing_enabled会同时检查前两个密钥是否都已填写(见 config/cashier.php)。密钥未配置时,所有订阅页面会自动重定向到仪表盘,本地开发无需担心报错。
📦 从零设计双定价计划:Basic 与 Pro
Larasonic 把定价计划从代码中抽离,集中存放在 config/subscriptions.php,改价格、改卖点只动这一个文件:
| 计划 | 价格 | 面向用户 | 核心内容 |
|---|---|---|---|
| Larasonic Basic 🚀 | $5/月 | 探索 Demo 的个人开发者 | 6 项基础功能 |
| Larasonic Pro ✨ | $15/月 | 需要 AI 能力的进阶用户 | 包含全部基础功能 + AI 特性 |
每个计划包含 4 个字段:
plan:计划显示名称(如 "Larasonic Basic 🚀")description:一句话卖点,直接展示在定价卡片上price_id:在 Stripe 后台创建 Price 后获得的 ID(price_xxx),是计费的真正"锚点"features:功能清单,渲染为卡片上的打勾列表
👉如何设计你的计划?先在 Stripe 后台创建两个 Price(月付/年付),拿到price_id后回填到配置文件即可,无需改动任何控制器逻辑。
🔁 核心流程:从点击"订阅"到 Billing Portal
整个订阅计费链路只有 3 个入口,路由定义在 routes/web.php(仅登录用户可访问):
用户点击"Subscribe" │ ▼ ① /subscriptions/{price_id} 创建 Stripe Checkout 会话并跳转支付 │ 支付成功 ▼ ② /subscriptions 订阅管理页:展示当前计划 + 发票 │ ▼ ③ /subscriptions (index) 重定向至 Stripe Billing Portal 用户自助:换卡、升降级、取消订阅关键点 1:Checkout 会话。SubscriptionController.php 的show()方法会先校验传入的price_id必须在配置白名单内(防止伪造价格),再调用 Cashier 的newSubscription()->checkout(),并指定支付成功/取消后的回跳地址。
关键点 2:Billing Portal 免开发。index()方法一行redirectToBillingPortal()就把用户交给 Stripe 官方托管的计费门户——更换银行卡、升级/降级计划、取消续费全部由 Stripe 页面完成,你一行前端代码都不用写,这是 SaaS 项目接入计费的最快路径。
关键点 3:用户模型即客户。User.php 通过引入 Cashier 的Billabletrait 变身 Stripe 客户,模型updated事件还会自动同步用户资料到 Stripe(User.php),保证发票收件信息永远最新。
🗄️ 数据库设计:订阅数据存在哪?
Cashier 迁移文件已随套件内置,php artisan migrate后自动生效:
| 迁移文件 | 作用 |
|---|---|
| create_customer_columns.php | users 表增加stripe_id、pm_type、pm_last_four、trial_ends_at |
0001_01_01_000011_create_subscriptions_table.php | 存储用户订阅记录与周期信息 |
0001_01_01_000012_create_subscription_items_table.php | 存储订阅下的具体价格项 |
💡pm_last_four(卡号后四位)用于在界面上展示"当前绑定的支付方式",而完整卡号由 Stripe 托管,天然符合 PCI 合规要求。
🎨 前端呈现:定价卡片与发票管理
订阅管理页由 Subscriptions/Index.vue 渲染,体验细节值得借鉴:
- 无订阅状态:展示警示提示 + 双计划定价卡片(PricingCard.vue),每张卡片含名称、价格、功能清单与 Subscribe 按钮
- 已有订阅状态:显示当前计划名,并提供"Manage Subscription"按钮直达 Billing Portal
- 发票列表:使用 Inertia 的
Deferred属性延迟加载历史发票,首屏渲染更快 - 页脚标注"🔒 Subscriptions are managed by Stripe securely",增强用户信任感
❓ 新手常见问题
Q1:忘记配置 Stripe 密钥会怎样?不会报错。billing_enabled为 false 时,所有订阅相关请求会静默重定向回仪表盘,非常适合本地开发。
Q2:想增加第三个"Enterprise"计划怎么办?只需在 config/subscriptions.php 数组里追加一项配置(含新的price_id),前端卡片与后端校验零改动自动生效。
Q3:用户支付失败/退款如何感知?Stripe 会向STRIPE_WEBHOOK_SECRET对应的 Webhook 端点推送事件(签名容差 300 秒),Cashier 默认事件列表已覆盖订阅生命周期,可据此触发邮件通知等业务逻辑。
Q4:如何限制"未付费用户不能使用功能"?借助 Cashier 提供的hasAnyActiveSubscription()等方法,在中间件或控制器中校验即可,User 模型已混入Billable,无需额外配置。
总结
通过本文,你已经掌握了 Larasonic 的完整 Stripe 订阅计费方案:一个配置文件设计双定价计划 → Checkout 完成支付 → Billing Portal 让用户自助管理。这套"配置化 + 托管化"的架构让订阅功能几乎零维护成本,配合 Larasonic 自带的认证、团队、Filament 后台,是快速上线现代 SaaS 产品的高性价比选择。
【免费下载链接】larasonic-vueThe Ultimate Laravel Starter Kit for Modern SaaS (VILT) with Shadcn Components (Vue, Inertia & Shadcn)项目地址: https://gitcode.com/gh_mirrors/la/larasonic-vue
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考