86

我们开始在Redsmin(我们的项目之一)上实施 Stripe,我认为我们可能遗漏了一些东西。下面是它的工作原理:

  1. 要使用我们的产品,用户必须选择一个计划(免费、s、m、xl、xxl...),然后输入其登录名/密码,然后就可以免费试用 30 天。当用户提交表单时,我们的服务器使用指定的计划调用 Stripe create_customer并且没有信用卡(因为我们希望提供 30 天免费且不需要信用卡)并且我们使用返回的customer_id和更新我们这边的用户模型subscription_id

  2. 我们设置了一个 webhook 来接收条带事件,因此 30 天后我们的 webhook应该会收到一个customer.subscription.updated带有object.status == active. 我对吗?

  3. 但是,由于我们在注册时没有为用户指定关联卡,所以我们应该customer.subscription.updated在另一个事件之后很快收到object.status == unpaid对吗?然后在我们这边,我们停用用户帐户并强制它进入我们的计划选择页面。

  4. 从那时起,用户可以选择免费计划或我们的高级计划之一:

  5. #Scenario 1如果用户选择免费计划,我们只需在我们这边重新激活其帐户,不做任何其他事情,因为我们将条带上的免费计划配置为 0 美元。我们的免费计划是否实施了正确的流程?有没有更好的方法?

  6. #Scenario 2如果用户选择高级计划,我们会将他重定向到信用卡表格,然后将其发送到 Stripe,然后我们使用临时卡令牌更新 Stripe 客户帐户。我们接下来应该做什么?

    • 我们应该等待 stripe 向我们发送事件吗?如果有,是什么事件?customer.subscription.updated? charge.succeeded? 那时的价值是object.status多少?
    • 我们是否应该直接重新激活我们这边的用户帐户并等待来自 Stripe 的确认?如果是这样,我们应该等待的事件名称和数据是什么?

4

1 回答 1

48

在第 2 部分中您执行此操作:

我们设置了一个 webhook 来接收条带事件,所以 30 天后,我们的 webhook 应该会收到一个带有 object.status == active 的 customer.subscription.updated 事件,对吗?

您还可以考虑实施customer.subscription.trial_will_endwebhook,此 webhook 将在客户试用期结束前三天发送,并允许您向客户发送通知以更新其付款信息。

这样,如果用户确实决定去更新他们的付款信息,Stripe 将能够在客户试用期结束后立即付款,他们将能够继续使用您的服务而不会中断。

#Scenario 1 如果用户选择免费计划,我们只需在我们这边重新激活其帐户,不做任何其他事情,因为我们将条带上的免费计划配置为 0 美元。我们的免费计划是否实施了正确的流程?有更好的方法吗?

据我所知,这是使用 Stripe 实施免费计划的最佳方式,我可能会确保除非需要,否则不会向客户发送任何发票。如果他们使用免费计划,我怀疑用户会期望收到每个计费周期的发票。

#Scenario 2 如果用户选择高级计划,我们会将他重定向到信用卡表格,然后将其发送到 Stripe,然后我们使用临时卡令牌更新 Stripe 客户帐户。我们接下来应该做什么?:

  • 我们是否应该等待 stripe 向我们发送事件,如果是,是什么事件?客户.订阅.更新?收费。成功了吗?那么 object.status 的值是什么?
  • 我们是否应该直接重新激活我们这边的用户帐户并等待来自 Stripe 的确认?如果是这样,我们应该等待的事件名称和数据是什么?

一旦用户选择了一个计划并更新了他们的付款信息,我将立即激活他们的帐户,前提是对来自 Stripe 的订阅更新的响应是成功的。

只要您从 Stripe 仪表板配置了订阅首选项,您就应该能够让 Stripe 处理付款失败时的处理方式。只需确保您实施了customer.subscription.updatedwebhook,因为这将是 Stripe 在将订阅标记为未付费或已取消时向您发送的 webhook,从而允许您相应地更新自己的记录。

于 2013-10-21T19:52:03.530 回答