You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Laravel Cashier(Stripe)获取订阅费用及优惠券使用情况?

Laravel Cashier 对接 Stripe:获取订阅费用与优惠券状态

嘿,刚好之前折腾过类似需求,Laravel Cashier 其实已经帮你封装好了对应的能力,完全不需要自己额外把这些信息存到数据库里!下面给你具体说怎么实现:

获取每月订阅费用

Cashier 的 Subscription 模型提供了直接访问 Stripe 订阅详情的方法,你可以轻松拿到当前订阅的每月费用:

  1. 首先获取用户的订阅实例(假设用户使用的是默认订阅计划,你可以根据自己的订阅名称调整):
$subscription = auth()->user()->subscription('default');
  1. 转换并拿到常规格式的每月费用:
    Stripe 里的金额是以「最小货币单位」存储的(比如美元是分,人民币是分),所以需要做简单转换:
// 获取原始单价(单位:分)
$unitAmount = $subscription->stripe_price->unit_amount;
// 转换为带两位小数的金额格式
$monthlyPrice = number_format($unitAmount / 100, 2);

如果你的订阅是年付等其他周期,还可以通过 $subscription->stripe_price->recurring->interval 判断周期,再做对应计算。

判断是否使用优惠券及获取优惠券信息

Cashier 同样封装了优惠券相关的方法,不需要自己手动记录:

  1. 判断用户是否使用了优惠券:
    通过 discount() 方法检查即可,返回非空值说明当前订阅有优惠:
if ($discount = $subscription->discount()) {
    // 用户正在使用优惠券
}
  1. 获取优惠券的具体信息:
    从 discount() 返回的对象里可以拿到优惠券名称、折扣比例/金额等详情:
$couponName = $discount->coupon->name;
// 如果是百分比折扣(比如半价就是50)
$discountPercent = $discount->coupon->percent_off;
// 如果是固定金额折扣,转换为常规格式
$discountAmount = number_format($discount->coupon->amount_off / 100, 2);

要不要自己存数据库?

除非你有特殊需求(比如需要记录用户历史使用的优惠券、或者在离线环境下查看数据),否则完全不需要自己存储这些信息。Cashier 会实时从 Stripe API 拉取最新的订阅状态和费用信息,保证数据的准确性。

内容的提问来源于stack exchange,提问作者Mr J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:31:28