Stripe payments 使用条带恢复订阅(并对以前未支付的服务收费)

Stripe payments 使用条带恢复订阅(并对以前未支付的服务收费),stripe-payments,credit-card,subscription,recurring-billing,Stripe Payments,Credit Card,Subscription,Recurring Billing,我有一个web服务,它为我的用户发布和托管某些信息。每个用户的编辑界面都独立于他们发布的信息。我正在使用条带订阅为它计费,但我很难想出一个可行的方法来处理未付订阅。以下是我想要实现的逻辑: 第一次计费失败后,我的应用程序应锁定用户的编辑界面;相反,它应该为他们提供一个页面,其中包含解决他们付款问题的选项。然而,他们发布的信息仍将被发布,因此延迟付款不会中断访问者的访问 在15天后的最后一次计费尝试失败后,我的应用程序也应该删除他们发布的信息。此时,用户的编辑界面被替换为一个允许用户使用新信用卡重

我有一个web服务,它为我的用户发布和托管某些信息。每个用户的编辑界面都独立于他们发布的信息。我正在使用条带订阅为它计费,但我很难想出一个可行的方法来处理未付订阅。以下是我想要实现的逻辑:

  • 第一次计费失败后,我的应用程序应锁定用户的编辑界面;相反,它应该为他们提供一个页面,其中包含解决他们付款问题的选项。然而,他们发布的信息仍将被发布,因此延迟付款不会中断访问者的访问
  • 在15天后的最后一次计费尝试失败后,我的应用程序也应该删除他们发布的信息。此时,用户的编辑界面被替换为一个允许用户使用新信用卡重新激活帐户或完全删除帐户的界面
  • 如果用户选择重新激活帐户,则不应获得试用期
  • 如果用户重新激活,他们还必须为之前跳过的15天付费,要么缩短第一个账单周期15天,要么在第一个账单中增加15天服务费
  • #1和#2非常容易实现,如果我注意正确的Webhook,那么只需将拖欠的客户或订阅已删除或未支付的客户的请求重定向到“修复此问题”页面即可#3也很简单,只需将
    试用版
    设置为
    立即
    即可创建订阅

    这是个棘手的问题。我如何确定用户的最后一张发票在取消订阅之前的未付时间?如何缩短新订阅的第一个计费周期?或者,我如何按比例计算客户最后一张发票的总金额,以代表我实际提供给他们的部分,以便将该金额添加到新发票中?(我知道我可以在开始新订阅之前创建一个发票项目来收取金额,所以至少这是可能的。)


    最后,Stripe的“标记订阅未付”选项是否有助于解决这些问题?它看起来像是在不断地创建发票,但并不试图为它们收费;我不认为这就是我想要的。

    你完全可以通过Stripe的订阅来完成所有这些。正如您所提到的,前两个问题应该用Webhook解决。您将监听您端的
    发票.付款失败
    ,以检测何时付款失败,并立即阻止您的UI,要求您的客户更新其卡的详细信息

    要更新他们的卡详细信息,您可以使用,而不必设置
    数据金额
    参数,这样它就不会向客户显示价格。以下是一个例子:

    <form action="/charge" method="POST">
      <script
        src="https://checkout.stripe.com/checkout.js" class="stripe-button"
        data-key="pk_test_XXXX"
        data-image="/square-image.png"
        data-name="Demo Site"
        data-description="Update Card Details"
        data-panel-label="Update Card Details"
        data-label="Update Card Details">
      </script>
    </form>
    
    
    
    每次您的客户尝试更新其卡时,您都会使用并在
    参数中传递新卡令牌。这将删除客户的默认卡,并将其替换为新卡。它还将尝试在“过期”状态下支付每个订阅的最新发票。在您的情况下,这意味着将尝试支付仍处于重试模式的最新发票。这不算作重试,可以看作是独立的。如果成功,您只需重新启动UI,否则您将继续要求客户更新其卡的详细信息

    当您达到第四次失败付款时,您将获得一个
    customer.subscription.cancelled
    ,如果这是您在中的重试设置中设置的。通过检查事件上的
    request
    键并确保其
    null
    ,可以检测到它是自动取消。在这种情况下,您将完全为您的客户阻止UI/帐户

    在过去的15天里,如果我正确理解了您的流程,那么客户实际上无法使用您的应用程序,因为您部分锁定了UI。但是,如果您仍然希望他支付该金额,您应该在您的数据库中存储该客户在无法使用该订阅的15天内欠您X美元的信息

    稍后,您的客户最终返回并希望重新启用其帐户。此时,您通知他,付款流程将从今天开始重新启动,您将向他收取他之前错过的额外15天的费用。要做到这一点,我将使用这将允许您添加一个额外的金额到第一张发票自动。您将遵循以下步骤:

  • 为您的客户提供X美元的发票项目
  • 如果您的计划中默认设置了试用期,则计划设置的新订阅将从
    试用期结束到
    “现在”
  • 这将自动为计划金额创建第一张发票,并添加之前创建的发票项
  • 这里的另一个解决方案是重新打开未付款的最近关闭的发票,并使用。当这种情况发生时,你知道你的客户现在付给你整整一个月的钱,而不仅仅是他欠你的15天。在这种情况下,您将创建一个新订阅,并设置15天的试用期,以便他在试用后再次开始付款

    我不会在这里使用“标记为未付”选项,因为您将客户完全锁定在应用程序之外。当您让客户使用您的应用程序并计划在几个月内为每张发票向他收费时,我将使用此功能。例如,这将用于电力供应商,他们会在多个计费周期内保持您的电力供应,并继续尝试为每张发票向您收费

    在这种情况下,客户真正欠您的金额取决于您允许的重试次数和每次重试之间的天数。您可以在这里使用发票上创建的
    值,并将其与获得
    cus时的当前时间进行比较