Во-первых, вы, вероятно, не хотите делать цикл for
для асинхронного кода, подобного этому;если у вас есть n
клиентов для взимания платы, вы будете делать n
одновременных запросов, и это может вызвать целый ряд проблем.
Во-вторых, вы используете код оплаты, предназначенный для создания одно-off Charge от Stripe Token, а не создайте Charge от Customer .
Предполагая, что вы действительно сохранили идентификаторы клиентов, вы, вероятно, захотите использовать что-то вроде async для этого.
Я бы подошел к этому, используя #queue
, и разделил бы это следующим образом:
Итерациянад клиентами и для каждого создайте «задачу», которая включает в себя customer
ID, amount
, currency
, недавно сгенерированные idempotency_key
и attempt_count
, а затем нажмите эту задачув очередь;
в функции «обработка» очереди, я попытался бы создать Charge с этой задачей и ее данными, и если это не удалось из-за сетевой или другой повторяющейся ошибки,Я бы увеличил attempt_count
и вставил бы его обратно в очередь, чтобы его можно было повторить.Вероятно, у меня также есть тест для ограничения количества повторных попыток и пропуска / регистрации всех неудачных попыток, т. Е. 5 раз.