Mad*_*aks 40 downgrade stripe-payments temboo
是否可以在期末而不是立即降级用户?我已经梳理了API Docs,但却无法弄清楚如何实现这一目标.
作为一种解决方法,我目前正在取消用户的订阅,然后订阅较少的订阅,试用到月底.这不会起作用 - 我需要能够将降级延迟到期末(但是在请求降级时"记录"它与Stripe).
很明显,有一些方法可以通过webhook回调和本地跟踪用户订阅来实现这一目标,但我希望尽可能避免这种情况.
编辑
在有人要求之前 - 我正在使用Temboo的PHP SDK.但是,我不是在寻找一种特定于语言的方法,只是一种高级的方法(如果可能的话).
Sne*_*ack 11
正如@Safinn和@Martin所提到的,您可以取消订阅, at_period_end: true以便在特定日期采取取消措施.
为了降级到不同的计划,我解决它的方法是执行上述操作,然后创建一个在同一日期/时间结束的新计划的免费试用.这样,旧计划将在新计划的审判结束的同一天取消(使其处于活动状态).
这让Stripe完全处理降级(这应该是更直接的恕我直言),而不是在数据库中设置webhooks或跟踪日期.
在 Stripe 发布订阅计划后,这里介绍的大多数解决方案看起来像是 hack,这可能是最优雅的解决方案。事实上,条纹文档有确切说明相同的情况下的例子在这里。
第 1 步:current_period_end从您希望降级的现有订阅中获取价值。
步骤 2:从现有订阅创建新的订阅计划。
$subscriptionSchedule = $stripe->subscriptionSchedules->create([
'from_subscription' => 'sub_G678SASEGF',
]);
Run Code Online (Sandbox Code Playgroud)
第 3 步:用两个阶段更新新创建的计划。phase 0在当前阶段,在结束current_period_end和phase 1为下一阶段即开始在current_period_end与下调价格的计划。
$stripe->subscriptionSchedules->update(
$subscriptionSchedule->id,
[
'end_behavior' => 'release',
'phases' => [
[
'start_date' => $current_period_start,
'end_date' => $current_period_end,
'plans' => [
[
'price' => $current_price_id
],
],
],
[
'start_date' => $current_period_end,
'plans' => [
[
'price' => $downgraded_price_id,
],
]
],
],
]
Run Code Online (Sandbox Code Playgroud)
您始终可以检查订阅对象以查看是否有活动的计划,然后检索计划以利用任何未来的降级。这种方法的优点是它可以应用于任何降级和/或计费周期更改。使用前面回答中描述的多计划方法,一个订阅只能包含具有相同计费周期的项目。
是的,使用最新版本的Stripe API。
(您可能在Temboo的SDK中使用的Stripe令牌与Stripe的常规PHP库兼容)
将客户更新为新计划时,只需执行以下操作:
$sub = $myUser->data['stripe_subscription_id'];
$subscription = \Stripe\Subscription::retrieve($sub);
\Stripe\Subscription::update($sub, [
'cancel_at_period_end' => false,
'items' => [
[
'id' => $subscription->items->data[0]->id,
'plan' => $plan,
],
],
'prorate' => false,
'trial_end' => $subscription->current_period_end
]);
$subscription->save();
Run Code Online (Sandbox Code Playgroud)通过设置prorate为false,trial_end以$subscription->current_period_end和cancel_at_period_end为false,则有效地告诉条纹:
直到该用户当前的帐单到期(在期末取消)这一天之前都不向其收费,不要在计划开关(按比例分配)上向他们退还任何款项,并在其当前帐单周期结束时(试用期结束)重新开始计费。
这样可以在旧计划结束后将其帐单更改为新计划。
您应该跟踪您的用户何时加入计划 - 在您的数据库中的 customer_id 旁边保留一个日期字段。您可以使用此日期来确定他们加入的月份的哪一天,从而确定计费周期。如果账单日是当月的 31 日,那么在较短的月份,Stripe 将在这些月的最后一天 ( https://support.stripe.com/questions/subscription-date-at-end-of-month )计费。
现在,当用户希望降级时,他们会在登录时完成您网站上的操作。您记下此降级请求并将其存储在数据库中,我们将其称为“stripe_actionable_table”。此表中的重要字段是:
然后,您将有一个每天在特定时间运行的 cron,并检查此 stripe_actionable_table,如果一个月中的某一天与表中的某一行匹配,则操作 Stripe 请求。完成后,您可以删除该行或将该行标记为已删除。
| 归档时间: |
|
| 查看次数: |
6168 次 |
| 最近记录: |