Как реализовать полосу идемпотентности ключа - PullRequest
0 голосов
/ 28 мая 2018

У меня есть множество клиентов, для которых я хочу массово списывать их с продаж.Иногда из-за сети некоторые платежи не проходят, в то время как другие делают, поэтому новый запрос взимает плату со всех клиентов снова.Я читал, что могу использовать идемпотентность, но заметил, что ключ восстанавливается каждый раз, когда я делаю запрос.Как реализовать генерацию ключа для идентификации каждого пользователя без сохранения ключа в БД, поскольку он должен быть временным ключом?

 for(customer in customers){
     stripe.charges.create({
        amount: 2000,
        currency: "usd",
        source: token,
        customer: stripe_customerId,
    }, {
       idempotency_key: uuid
    }, function(err, charge) {
        // asynchronously called
    });
}

Есть идеи, пожалуйста?

1 Ответ

0 голосов
/ 28 мая 2018

Во-первых, вы, вероятно, не хотите делать цикл for для асинхронного кода, подобного этому;если у вас есть n клиентов для взимания платы, вы будете делать n одновременных запросов, и это может вызвать целый ряд проблем.

Во-вторых, вы используете код оплаты, предназначенный для создания одно-off Charge от Stripe Token, а не создайте Charge от Customer .

Предполагая, что вы действительно сохранили идентификаторы клиентов, вы, вероятно, захотите использовать что-то вроде async для этого.

Я бы подошел к этому, используя #queue, и разделил бы это следующим образом:

  1. Итерациянад клиентами и для каждого создайте «задачу», которая включает в себя customer ID, amount, currency, недавно сгенерированные idempotency_key и attempt_count, а затем нажмите эту задачув очередь;

  2. в функции «обработка» очереди, я попытался бы создать Charge с этой задачей и ее данными, и если это не удалось из-за сетевой или другой повторяющейся ошибки,Я бы увеличил attempt_count и вставил бы его обратно в очередь, чтобы его можно было повторить.Вероятно, у меня также есть тест для ограничения количества повторных попыток и пропуска / регистрации всех неудачных попыток, т. Е. 5 раз.

...