使用Laravel Cashier将订阅交换到不同的结算周期会导致立即收费

时间:2015-12-10 19:38:41

标签: laravel laravel-4 laravel-5 stripe-payments laravel-cashier

有一种情况是用户可以从月订阅转换为年度订阅。

可以使用以下代码完成:

$company->subscription('annual')
        ->withCoupon($couponCode)
        ->swapAndInvoice(1); // 1 is the quantity

这是有效的,但我注意到它会立即开票并在同一时刻向用户收费,这会立即关闭发票。这意味着webhooks无法修改发票以添加税项等行项目。

我甚至修改了swapAndInvoice以使其不会立即付款以允许发票具有Stripe允许发票的通常~1小时修改期。但是,它仍会立即向用户收费。我认为这是因为从月度计费到年度计费的变化。但不确定。

//Stripe_Invoice::create(['customer' => $customer->id], $this->getStripeKey())->pay();
Stripe_Invoice::create(['customer' => $customer->id], $this->getStripeKey());

任何想法都表示赞赏。

Stripe自己的文档说明如下:

  

当客户在结算周期中间切换订阅计划时,会发生以下情况:

     

如果新计划的计费频率与旧计划不同(例如,每月到每年,从有效到试用,从免费到有效等)

     

新计划的第一个完整期间立即开始(或根据需要在试用期后开始),并且客户在第一期间减去帐户余额。

1 个答案:

答案 0 :(得分:1)

create the invoice items之前,您需要updating the subscription切换到新计划(自动创建的发票将包含所有待处理的发票项目)。

或者,您可以在非常短的试用期内更新订阅(即将trial_end设置为将来的几秒钟)。审判结束后,将创建一个新发票,但不会立即关闭 - 它将被视为定期付款,并且发票将在尝试付款之前保持开放约一小时。 invoice.created事件将发送到您的webhook端点,您可以添加所需的发票项目。

没有提供示例代码,因为我不熟悉Laravel Cashier,对不起!