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

lit*_*ull 4 javascript node.js stripe-payments

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

col*_*inm 8

正确的答案:

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

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

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

这必须立即工作,客户体验被诅咒答案:

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

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


Ben*_*n D 8

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

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

将仅查找未结发票....您还可以delinquent=true在查找逾期客户时传递参数.我只在PHP中对此进行了测试,因此返回的逾期客户看起来像这样:

Stripe_Customer::all(array(
  "delinquent" => true
));
Run Code Online (Sandbox Code Playgroud)

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

 stripe.customers.list(
       {delinquent:true},
      function(err, customers) {
      // asynchronously called
    });
Run Code Online (Sandbox Code Playgroud)

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