我应该如何设计一个登录中间件来检查定期订阅是否失败?我知道Stripe会在事情发生时触发事件,而最好的做法是webhooks。问题是,我不能在当前实现中使用webhooks,因此我必须检查用户何时登录。
答案 0 :(得分:8)
正确答案:
正如您已经知道的那样,webhooks。
我不确定你在做什么,webhooks不是当前实现中的一个选项:它们只是对公开可用URL的POST,与任何最终用户请求相同。如果您可以在Node中实现其他任何功能,则可以实现webhook支持。
实施webhooks不是一个全有或全无的主张;如果您只想跟踪拖欠付款,则只需实施一个webhook活动的处理。
现在必须工作,客户体验诅咒答案:
检索到的Stripe Customer对象包含delinquent
字段。如果最新发票费用失败,此字段将设置为true
。
N.B。此通话可能需要几秒钟(有时为两位数)才能完成,在此期间您的网站似乎已停止向您的用户发挥作用。如果您拥有较大的用户群或短登录会话,则可能还会超出Stripe API速率限制。
答案 1 :(得分:8)
我实际上是在Stripe支持小组写了一封电子邮件,抱怨这个问题(如果您正在尝试提取拖欠条目,需要循环查看每个发票或客户)并且看起来您实际上可以在没有webhooks的情况下执行此操作或浪费的循环......只是过滤功能没有记录。当前文档显示,您只能按customers
,invoices
(日期)和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
));
但我相信这应该适用于Node.js:
stripe.customers.list(
{delinquent:true},
function(err, customers) {
// asynchronously called
});
这里的一个重要警告是,因为这种过滤没有记录,所以可以在不事先通知的情况下进行更改......但鉴于这种方法有多么明显,我猜它是非常安全的。