【问题标题】:How to check failed recurring subscription Stripe如何检查失败的定期订阅 Stripe
【发布时间】:2013-09-22 20:26:39
【问题描述】:

我应该如何设计一个登录中间件来检查定期订阅是否失败?我知道当事情发生时,Stripe 会触发事件,而最佳实践是 webhook。问题是,我不能在当前实现中使用 webhook,所以我必须检查用户何时登录。

【问题讨论】:

    标签: javascript node.js stripe-payments


    【解决方案1】:

    正确答案:

    如您所知,webhook。

    我不确定您在做什么,webhook 在当前实现中不是一个选项:它们只是对公开可用 URL 的 POST,与任何最终用户请求相同。如果您可以在 Node 中实现任何其他功能,则可以实现 webhook 支持。

    实施 webhook 不是一个全有或全无的命题;如果您只想跟踪拖欠付款,则只需对一个 webhook 事件进行处理。

    这必须立即工作,客户体验该死的答案:

    检索到的 Stripe Customer 对象包含一个 delinquent 字段。如果最新的发票收费失败,此字段将设置为 true

    注意此调用可能需要几秒钟(有时会达到两位数)才能完成,在此期间,您的网站对您的用户来说似乎已停止运行。如果您的用户群较大或登录会话较短,您也可能会超出 Stripe API 速率限制。

    【讨论】:

    • 是的,这是 Stripe 的一大失败。您不能将更多参数传递给curl https://api.stripe.com/v1/customers \ -u * 调用这一事实是IMO 的一个相当大的疏忽。目前,他们让您传入的唯一参数是计数、偏移量和创建日期,因此,如果您要查找 X=Y 的所有客户(即delinquent=true 等),您必须检索每个客户(最多 100 个批次)并对其进行迭代......真是浪费时间!
    • 为什么说 webhook 是“正确”的答案?让某种 cron 作业列出拖欠人员并更新数据库有什么问题?
    【解决方案2】:

    我实际上给 Stripe 支持团队写了一封电子邮件,抱怨这个问题(如果您试图提取拖欠条目,则需要遍历每张发票或客户),看起来您实际上可以在没有 webhook 或浪费的情况下做到这一点循环......只是过滤功能没有记录。当前文档显示,您只能通过countcreated(日期)和offset...修改customersinvoices 的查询... 但是如果您传入其他参数Stripe API实际上会尝试理解查询,所以cURL请求:

    https://api.stripe.com/v1/invoices?closed=false&count=100&offset=0

    将只查找未结发票....您还可以在查找拖欠客户时传递delinquent=true 参数。我只在 PHP 中对此进行了测试,因此返回的拖欠客户如下所示:

    Stripe_Customer::all(array(
      "delinquent" => true
    ));
    

    但我相信这应该适用于 Node.js:

     stripe.customers.list(
           {delinquent:true},
          function(err, customers) {
          // asynchronously called
        });
    

    这里最大的警告是,由于这种过滤是无证的,它可能会在没有通知的情况下进行更改......但考虑到这种方法是多么明显,我猜它是相当安全的。

    【讨论】:

    • 这仍然没有记录吗?我找不到它。
    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 2019-02-28
    • 2017-08-20
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多