我使用Stripe(PHP客户端,Laravel)来处理我们的订阅。我们都有订阅和插件,Stripe似乎并不支持 - 但是我找到了一个解决方法,但我遇到了问题。
设置
我们为用户提供了一些不同的订阅。
每月:
每年:
扩展中心:
想象一下,用户订阅了每月5个实体计划(每月40美元),每月额外增加2个插件(每月20美元)。总计60美元/月。
使用Stripe的PHP客户端库将插件添加为SubscriptionItem。
我如何将用户升级为年度订阅:
正如您所看到的,唯一的区别是结算间隔和价格,但对我们系统的访问权限相同。
我尝试过升级订阅计划(不是插件),但由于帐单间隔不同,我收到的错误似乎合乎逻辑。
我是否必须删除所有订阅插件(SubscriptionItems),然后进行升级以及何时使用新的结算间隔再次添加订阅插件? 我不喜欢这种方法,因为我必须删除初始订阅,然后在收费失败时没有返回用户...
另一种方法是使用addons seperat从最初创建一个全新的订阅。然后我可以将新订阅分配给客户并删除旧订阅。
所有这一切看起来都有点奇怪,因为Stripe非常简单灵活。我可能会错过一些东西?我呢?
当我在订阅中有其他订阅项目时,在每月和每年计划之间切换的最佳方式是什么?
希望你理解我的问题。谢谢!
答案 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',
],
],
]);