我应该如何设计一个登录中间件来检查定期订阅是否失败?我知道当事情发生时,Stripe 会触发事件,而最佳实践是 webhook。问题是,我不能在当前实现中使用 webhook,所以我必须检查用户何时登录。
2 回答
我实际上给 Stripe 支持团队写了一封电子邮件,抱怨这个问题(如果你试图提取拖欠条目,需要遍历每张发票或客户),看起来你实际上可以在没有 webhook 或浪费循环的情况下做到这一点。 . 只是过滤功能没有记录。当前文档显示您只能修改customers
or invoices
by count
、created
(date) 和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
));
但我相信这应该适用于 Node.js:
stripe.customers.list(
{delinquent:true},
function(err, customers) {
// asynchronously called
});
这里最大的警告是,由于此过滤没有记录,因此可能会在没有通知的情况下进行更改……但是鉴于该方法的显而易见性,我猜它非常安全。
正确答案:
如您所知,webhook。
我不确定你在做什么,webhook 在当前实现中不是一个选项:它们只是一个公开可用 URL 的 POST,与任何最终用户请求相同。如果您可以在 Node 中实现任何其他功能,则可以实现 webhook 支持。
实施 webhook 不是一个全有或全无的命题。如果您只想跟踪拖欠付款,则只需对一个 webhook 事件进行处理。
这必须立即工作,客户体验该死的答案:
检索到的 Stripe Customer 对象包含一个delinquent
字段。true
如果最新的发票费用失败,则此字段将设置为。
注意此调用可能需要几秒钟(有时会达到两位数)才能完成,在此期间,您的网站对您的用户来说似乎已停止运行。如果您的用户群较大或登录会话较短,您也可能会超出 Stripe API 速率限制。