news 2026/8/22 12:17:33

Larasonic Stripe订阅计费完整教程:从零设计双定价计划并接入Billing Portal

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Larasonic Stripe订阅计费完整教程:从零设计双定价计划并接入Billing Portal

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 migrate

2. 配置 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.phpusers 表增加stripe_idpm_typepm_last_fourtrial_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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 12:17:00

什么是字节码?采用字节码的好处是什么?

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),字节码是一种中间代码,它是由源代码经过编译生成的一种二进制表示形式。字节码通常不针对特定的硬件平台,而是针对虚拟机设计的&…

作者头像 李华
网站建设 2026/8/22 12:14:50

centos虚拟机里面为何执行ethtool不显示速率?

最近蛮多类似询问,虚拟机里面执行ethtool为何不显示速率,但是windows却能显示速率为10Gbps。上图上图:与物理主机不同,在kvm虚拟化环境中,ethtool仅返回了网口状态。来看看红帽的说明:IssueHow do I check …

作者头像 李华
网站建设 2026/8/22 12:14:46

3分钟把开源宏录制工具PyMacroRecord调成中文界面:完整指南

3分钟把开源宏录制工具PyMacroRecord调成中文界面:完整指南 【免费下载链接】PyMacroRecord Free and Open Source Macro Recorder with a modern GUI using Python 项目地址: https://gitcode.com/gh_mirrors/py/PyMacroRecord PyMacroRecord 是一款免费的开…

作者头像 李华
网站建设 2026/8/22 12:14:16

【VRTK】【VR开发】【Unity】19-VRTK实现旋转运动

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 在实际开发中,旋转运动也是时常需要模拟的重要运动类型。常见的场景有开关门,方向盘轮胎以及拉动拉杆等等。 旋转运动的实现可以基于物理系…

作者头像 李华
网站建设 2026/8/22 12:13:40

搭建elk环境并接入frostmourne,实现监控报警效果(三)

浏览 #docker-compose.yaml配置 version: 3.8 services:kibana:# 镜像名称image: docker.elastic.co/kibana/kibana:8.6.0# 容器名称hostname: kibanacontainer_name: kibanaports:- 5601:5601volumes:- /data/elk_monitor/kibana/config/kibana.yml:/usr/share/kibana/confi…

作者头像 李华
网站建设 2026/8/22 12:12:24

Realtek 8192FU 无线网卡驱动:一次配置长期有效的 Linux 安装指南

Realtek 8192FU 无线网卡驱动:一次配置长期有效的 Linux 安装指南 【免费下载链接】rtl8192fu Realtek 8192FU Linux USB无线网卡驱动 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8192fu Linux 默认不带 Realtek 8192FU 的驱动,这张无线网卡…

作者头像 李华