Hop*_*pez 3 javascript node.js stripe-payments
我有一系列客户,我想对其进行批量收费。有时由于网络的原因,有些费用没有通过,而有些则因此提出新的请求再次向所有客户收费。我读到我可以使用幂等性,但注意到每次发出请求时密钥都会重新生成。我如何实现生成密钥来识别每个用户而不将密钥存储在数据库中,因为它是一个临时密钥?
for(customer in customers){
stripe.charges.create({
amount: 2000,
currency: "usd",
source: token,
customer: stripe_customerId,
}, {
idempotency_key: uuid
}, function(err, charge) {
// asynchronously called
});
}
Run Code Online (Sandbox Code Playgroud)
请对此有任何想法吗?
首先,您可能不想为这样的for异步代码执行循环;如果您有n客户要收费,您将n同时提出请求,这可能会导致一系列问题。
其次,您使用的 Charge 代码旨在从 Stripe 令牌创建一次性 Charge,而不是从 Customer 创建 Charge。
假设您实际上已经保存了客户 ID,您可能需要考虑使用async 之类的东西。
我会使用 来处理它#queue,我会按如下方式拆分:
迭代客户,并为每个客户创建一个“任务”,其中包括customerID、amount、currency、 新生成的idempotency_key和attempt_count,然后将该任务推送到队列中;
在队列“处理”功能中,我会尝试使用该任务及其数据创建一个 Charge,如果由于网络或其他可重试错误而失败,我会增加attempt_count并将其推回队列,以便可以重试。我可能还会有一个测试来限制重试次数,并跳过/记录任何失败的次数,即 5 次。