【发布时间】:2013-09-22 20:26:39
【问题描述】:
我应该如何设计一个登录中间件来检查定期订阅是否失败?我知道当事情发生时,Stripe 会触发事件,而最佳实践是 webhook。问题是,我不能在当前实现中使用 webhook,所以我必须检查用户何时登录。
【问题讨论】:
标签: javascript node.js stripe-payments
我应该如何设计一个登录中间件来检查定期订阅是否失败?我知道当事情发生时,Stripe 会触发事件,而最佳实践是 webhook。问题是,我不能在当前实现中使用 webhook,所以我必须检查用户何时登录。
【问题讨论】:
标签: javascript node.js stripe-payments
正确答案:
如您所知,webhook。
我不确定您在做什么,webhook 在当前实现中不是一个选项:它们只是对公开可用 URL 的 POST,与任何最终用户请求相同。如果您可以在 Node 中实现任何其他功能,则可以实现 webhook 支持。
实施 webhook 不是一个全有或全无的命题;如果您只想跟踪拖欠付款,则只需对一个 webhook 事件进行处理。
这必须立即工作,客户体验该死的答案:
检索到的 Stripe Customer 对象包含一个 delinquent 字段。如果最新的发票收费失败,此字段将设置为 true。
注意此调用可能需要几秒钟(有时会达到两位数)才能完成,在此期间,您的网站对您的用户来说似乎已停止运行。如果您的用户群较大或登录会话较短,您也可能会超出 Stripe API 速率限制。
【讨论】:
curl https://api.stripe.com/v1/customers \ -u * 调用这一事实是IMO 的一个相当大的疏忽。目前,他们让您传入的唯一参数是计数、偏移量和创建日期,因此,如果您要查找 X=Y 的所有客户(即delinquent=true 等),您必须检索每个客户(最多 100 个批次)并对其进行迭代......真是浪费时间!
我实际上给 Stripe 支持团队写了一封电子邮件,抱怨这个问题(如果您试图提取拖欠条目,则需要遍历每张发票或客户),看起来您实际上可以在没有 webhook 或浪费的情况下做到这一点循环......只是过滤功能没有记录。当前文档显示,您只能通过count、created(日期)和offset...修改customers 或invoices 的查询... 但是如果您传入其他参数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
});
这里最大的警告是,由于这种过滤是无证的,它可能会在没有通知的情况下进行更改......但考虑到这种方法是多么明显,我猜它是相当安全的。
【讨论】: