Допустим, мой пользователь отправляет токен кредитной карты на мой сервер для совершения покупки.Затем я сохраняю этот токен в корзине моего пользователя, и в последовательности я его заряжаю.
Я получаю ответ об успешном завершении с идентификатором заряда, и внезапно мой сервер перестает работать как раз перед тем, как я могу сохранить этот идентификатор зарядав корзине моего пользователя.
Оплата была определенно произведена, но я не смог сохранить ее в своей базе данных, чтобы сгенерировать заказ пользователя и сделать продукты доступными, поэтому я не знаю, удалось это или нет.
То, что я хочу сделать, - это уменьшить вероятность повторных платежей.Я просмотрел весь API-интерфейс Stripe, но не смог найти никакой информации о том, возможно ли получить заряд, используя токен карты, который использовался для его создания.
Каждый раз, когда мой сервер перезагружается,некоторые процессы запускаются для проверки целостности базы данных (кстати, я использую MongoDB), и один из этих процессов пытается взимать плату за все пользовательские корзины (с уже сгенерированными токенами карт), которые были оставлены в состоянии «ожидающий платеж»,Если жетон карты еще не был заряжен, все работает хорошо, но если он уже был заряжен, я просто не знаю, была ли заряд успешным или нет, поэтому я не могу обновить свою корзину до согласованного состояния.
Я могу получить токен карты, используя "stripe.tokens.retrieve (token) .then (..."), но я просто знаю, использовался он или нет. Я должен найти способ узнать, был ли онзаряжен, и если это удалось.
Я пытался сохранить токен карты в качестве метаданных своего заряда, поэтому я смог бы получить платежи, содержащие этот токен карты, в качестве метаданных, но, похоже, этозапрос такого типа невозможен.
Кто-нибудь знает, как решить эту проблему, или какую-либо лучшую логику для обеспечения согласованности платежей в реализации платежей MongoDB?