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

Laravel Cashier订阅退款后避免账户遗留信用问题求助

解决Laravel Cashier退款后遗留账户信用导致重新订阅不扣费的问题

问题核心:Stripe针对订阅发票的全额退款,默认会将退款金额转为客户的账户信用(Customer Balance),后续用户重新订阅时会优先使用该信用抵扣费用,而非向用户发起扣费。

修改后的实现代码

$subscription = $user->subscription();
$subscription->cancelNow();

$stripe_subscription = $subscription->asStripeSubscription();
$latest_invoice = Cashier::stripe()->invoices->retrieve($stripe_subscription->latest_invoice);

// 执行退款操作
Cashier::stripe()->refunds->create([
    'charge'    => $latest_invoice->charge
]);

// 获取当前用户对应的Stripe客户对象
$stripe_customer = $user->asStripeCustomer();

// 检查并清零客户账户信用(仅当余额为正时执行)
if ($stripe_customer->balance > 0) {
    Cashier::stripe()->customers->createBalanceTransaction($stripe_customer->id, [
        'amount' => -$stripe_customer->balance, // 负数表示扣除对应金额的余额
        'currency' => $stripe_customer->currency,
        'description' => '清零退款产生的账户信用'
    ]);
}

逻辑说明

  1. 原有的取消订阅+退款逻辑保持不变,确保订阅立即取消且完成退款。
  2. 新增的账户信用清零步骤:
    • 获取用户关联的Stripe客户对象,检查其账户余额
    • 若余额为正(即存在遗留信用),创建反向余额交易将余额清零
    • 该操作会直接移除客户的预付信用,后续重新订阅时系统会正常发起扣费请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:37:36