如何检查失败的重复订阅 Stripe

4

如何设计一个登陆中间件来检查重复订阅是否失败?我知道Stripe在发生事件时会触发通知,最佳实践是使用webhook。但问题在于,当前的实现无法使用webhook,所以必须在用户登录时进行检查。

2个回答

8
我实际上给Stripe支持团队写了一封电子邮件抱怨这个问题(如果您想提取拖欠条目,则需要循环遍历每个发票或客户),似乎您可以在没有Webhooks或浪费的循环的情况下实现这一点……只是过滤功能未记录在案。当前文档显示,您只能通过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
    });

这里需要注意的是,由于此筛选器未经记录,它可能会在没有通知的情况下进行更改...但考虑到这种方法是多么显而易见,我猜它相当安全。


这个还没有文档吗?我找不到它。 - Geige V

8
正确答案:
正如您已经知道的那样,webhooks。
我不确定在当前实现中webhooks不是一个选项的原因:它们只是向公开可用的URL发送的POST请求,与任何端用户请求相同。如果你可以在Node中实现其他任何东西,你就可以实现webhook支持。
实现webhooks并非全是或全不是的问题;如果您只想跟踪拖欠付款,您只需要为一个webhook事件实现处理即可。
“必须立即正常工作,用户体验被忽略”的答案:
检索到的Stripe客户对象包含一个“delinquent”字段。如果最新的发票付款失败,该字段将设置为“true”。
请注意,此调用可能需要数秒钟甚至几十秒才能完成,在此期间您的网站将似乎已停止对您的用户提供服务。如果您拥有庞大的用户群体或短暂的登录会话,您还可能超过Stripe API速率限制。

是的,这是Stripe的一个重大缺陷。事实上,你无法在 curl https://api.stripe.com/v1/customers \ -u * 调用中传递更多参数,我认为这是一个相当大的疏忽。目前,他们只允许你传递计数、偏移和创建日期等参数,因此如果你想找到所有X=Y(即delinquent=true等)的客户,你必须检索每个客户(最多100个批次)并对其进行迭代...多么浪费时间啊! - Ben D
为什么你说Webhooks是“正确”的答案?使用某种cron作业列出拖欠款项并更新数据库有什么问题吗? - Geige V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接