【问题标题】:Change subscription interval for subscription with multiple subscription items in Stripe更改 Stripe 中多个订阅项目的订阅间隔
【发布时间】:2018-01-30 20:14:36
【问题描述】:

我正在使用 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 Entity(200 美元/年)插件

如您所见,唯一的区别是计费间隔和价格,但对我们系统的访问权限相同。

我尝试只升级订阅计划(不是插件),但由于计费间隔不同,我收到了一个看起来合乎逻辑的错误。

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

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

所有这一切似乎有点奇怪,因为 Stripe 是如此简单和灵活。我可能错过了什么?我是吗?

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

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

【问题讨论】:

    标签: php laravel-5 stripe-payments subscriptions


    【解决方案1】:

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

    【讨论】:

    • 啊哈。非常感谢@duck。这将如何处理按比例分配?
    • 您应该会看到用于年度订阅的月度订阅中未使用时间的信用额度!如果您想完全禁用按比例分配,您可以在更新请求中传递"prorate" => false。有时我觉得在实践中看到它更容易理解,所以我建议在测试模式下运行上面的代码,然后在破折号或通过 API 中查看生成的对象! stripe.com/docs/subscriptions/upgrading-downgrading
    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2011-07-25
    • 2017-07-03
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2018-12-13
    相关资源
    最近更新 更多