更改条带

时间:2018-01-30 20:14:36

标签: php laravel-5 stripe-payments subscriptions

我使用Stripe(PHP客户端,Laravel)来处理我们的订阅。我们都有订阅和插件,Stripe似乎并不支持 - 但是我找到了一个解决方法,但我遇到了问题。

设置
我们为用户提供了一些不同的订阅。

每月:

  • 1个实体(每月10美元)
  • 5个实体(每月40美元)
  • 10个实体(每月80美元)

每年:

  • 1个实体(100美元/年)
  • 5个实体(400美元/年)
  • 10个实体($ 800 /年)

扩展中心:

  • 1个实体(每月10美元)
  • 1个实体(100美元/年)

想象一下,用户订阅了每月5个实体计划(每月40美元),每月额外增加2个插件(每月20美元)。总计60美元/月。

使用Stripe的PHP客户端库将插件添加为SubscriptionItem。

我如何将用户升级为年度订阅:

  • 1x 5个实体($ 400 /年)订阅
  • 2x 1实体($ 200 /年)插件

正如您所看到的,唯一的区别是结算间隔和价格,但对我们系统的访问权限相同。

我尝试过升级订阅计划(不是插件),但由于帐单间隔不同,我收到的错误似乎合乎逻辑。

我是否必须删除所有订阅插件(SubscriptionItems),然后进行升级以及何时使用新的结算间隔再次添加订阅插件? 我不喜欢这种方法,因为我必须删除初始订阅,然后在收费失败时没有返回用户...

另一种方法是使用addons seperat从最初创建一个全新的订阅。然后我可以将新订阅分配给客户并删除旧订阅。

所有这一切看起来都有点奇怪,因为Stripe非常简单灵活。我可能会错过一些东西?我呢?

当我在订阅中有其他订阅项目时,在每月和每年计划之间切换的最佳方式是什么?

希望你理解我的问题。谢谢!

1 个答案:

答案 0 :(得分:2)

Subscription Items对象下的所有Subscription必须使用相同的结算时间间隔。

如果您希望将用户从每月订阅移至年度订阅,则需要同时将所有项目更新为年度计划。从条纹方面来看,你会做类似的事情:

// create a customer
$customer = \Stripe\Customer::create([
    "source" => "tok_visa",
    "description" => "change my subscription customer"
]);

// create a sub with two monthly items
$sub = \Stripe\Subscription::create([
    "customer" => $customer->id,
    "items" => [
        [
            "plan" => "gold-monthly"
        ],
        [
            "plan" => "silver-monthly"
        ],
    ]
]);

// let's pretend we later retrieved that subscription
$subscription = \Stripe\Subscription::retrieve($sub->id);

// grab the items attached, change both to annual
echo \Stripe\Subscription::update($subscription->id, [
    'items' => [
        [
            'id' => $subscription->items->data[0]->id,
            'plan' => 'gold-annual',
        ],
        [
            'id' => $subscription->items->data[1]->id,
            'plan' => 'silver-annual',
        ],
    ],
]);