php - 更改 Stripe 中具有多个订阅项的订阅的订阅间隔

标签 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),然后进行升级,以及何时使用新的计费间隔再次添加订阅插件? 我不喜欢这种方法,因为我将不得不删除初始订阅,然后在收费失败的情况下无法返回用户...

另一种方法是创建一个全新的订阅,其中的插件与初始订阅分开。然后我可以将新订阅分配给客户并删除旧订阅。

所有这些看起来都有些奇怪,因为 Stripe 是如此简单和灵活。我可能会遗漏什么?我是吗?

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

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

最佳答案

Subscription 对象下的所有Subscription Items 必须使用相同的计费间隔。

如果您想将用户从按月订阅改为按年订阅,您需要同时将所有 项目更新为按年订阅。从 Stripe 的角度来看,你会做类似的事情:

// 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',
        ],
    ],
]);

关于php - 更改 Stripe 中具有多个订阅项的订阅的订阅间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529773/

相关文章:

php - Laravel 验证规则的自定义错误消息 : Dimensions

javascript - 为什么 AngularJS 会忽略 $scope 字段的变化?

stripe-payments - Stripe 目的地费用,如何设置关联账户的描述

html - 如何判断我的 Node 应用程序在 Heroku 上崩溃的原因? (HTML、Stripe、Heroku、NodeJS)

PHP 必填字段

php - 提高 yii 中的 sqlite 性能

php - 如何通过一个数据库连接将 mysql 结果存储在不同的单独变量中?

php - 如何直接从亚马逊 s3 下载文件?

php - 学说 : Set primary Key

laravel - Eloquent 将属性转换为 Collections 的意外行为