如何检查失败的定期订阅Stripe

时间:2013-09-18 07:21:23

标签: javascript node.js stripe-payments

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

2 个答案:

答案 0 :(得分:8)

正确答案:

正如您已经知道的那样,webhooks。

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

实施webhooks不是一个全有或全无的主张;如果您只想跟踪拖欠付款,则只需实施一个webhook活动的处理。

现在必须工作,客户体验诅咒答案:

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

N.B。此通话可能需要几秒钟(有时为两位数)才能完成,在此期间您的网站似乎已停止向您的用户发挥作用。如果您拥有较大的用户群或短登录会话,则可能还会超出Stripe API速率限制。

答案 1 :(得分:8)

我实际上是在Stripe支持小组写了一封电子邮件,抱怨这个问题(如果您正在尝试提取拖欠条目,需要循环查看每个发票或客户)并且看起来您实际上可以在没有webhooks的情况下执行此操作或浪费的循环......只是过滤功能没有记录。当前文档显示,您只能按customersinvoices(日期)和count修改createdoffset的查询... 如果您传入其他参数,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
    });

这里的一个重要警告是,因为这种过滤没有记录,所以可以在不事先通知的情况下进行更改......但鉴于这种方法有多么明显,我猜它是非常安全的。