我有一批顾客,我想对他们进行批量收费。有时由于网络的原因,有些收费不会通过,而有些则会因此提出新的请求,再次向所有客户收费。我读到我可以使用幂等性,但注意到每次我提出请求时都会重新生成密钥。如何实现生成密钥以标识每个用户,而不将密钥存储在DB中,因为它是临时密钥?
for(customer in customers){
stripe.charges.create({
amount: 2000,
currency: "usd",
source: token,
customer: stripe_customerId,
}, {
idempotency_key: uuid
}, function(err, charge) {
// asynchronously called
});
}对此有什么想法吗?
发布于 2018-05-28 17:35:51
首先,您可能不想对这样的异步代码执行for循环;如果您有n客户要付费,您将同时发出n请求,这可能会导致一系列问题。
其次,您使用的是收费代码,用于从Stripe令牌(而不是从客户处收取费用 )创建一次性收费。
假设您实际上已经保存了客户ID,那么您可能需要考虑使用类似于异步的东西。
我将使用#queue进行处理,并将其拆分如下:
customer ID、amount、currency、新生成的idempotency_key和attempt_count,然后将该任务推入队列;attempt_count并将其推回队列,以便重新尝试。我可能还会有一个测试来限制重试的次数,并跳过/记录任何失败的,即5次。https://stackoverflow.com/questions/50571031
复制相似问题