如何通过Laravel Cashier(Stripe)获取订阅费用及优惠券使用情况?
Laravel Cashier 对接 Stripe:获取订阅费用与优惠券状态
嘿,刚好之前折腾过类似需求,Laravel Cashier 其实已经帮你封装好了对应的能力,完全不需要自己额外把这些信息存到数据库里!下面给你具体说怎么实现:
获取每月订阅费用
Cashier 的 Subscription 模型提供了直接访问 Stripe 订阅详情的方法,你可以轻松拿到当前订阅的每月费用:
- 首先获取用户的订阅实例(假设用户使用的是默认订阅计划,你可以根据自己的订阅名称调整):
$subscription = auth()->user()->subscription('default');
- 转换并拿到常规格式的每月费用:
Stripe 里的金额是以「最小货币单位」存储的(比如美元是分,人民币是分),所以需要做简单转换:
// 获取原始单价(单位:分) $unitAmount = $subscription->stripe_price->unit_amount; // 转换为带两位小数的金额格式 $monthlyPrice = number_format($unitAmount / 100, 2);
如果你的订阅是年付等其他周期,还可以通过 $subscription->stripe_price->recurring->interval 判断周期,再做对应计算。
判断是否使用优惠券及获取优惠券信息
Cashier 同样封装了优惠券相关的方法,不需要自己手动记录:
- 判断用户是否使用了优惠券:
通过discount()方法检查即可,返回非空值说明当前订阅有优惠:
if ($discount = $subscription->discount()) { // 用户正在使用优惠券 }
- 获取优惠券的具体信息:
从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
相关产品推荐
相关产品推荐

