Лучшее решение для этого - использование Stripe Idempotent request.У нас была похожая проблема при оплате.Платеж пользователя обрабатывался несколько раз.
Идемпотентный ключ гарантирует, что только после того, как успешный платеж может быть обработан для каждого идемпотентного ключа, может быть предпринято несколько неудачных попыток.см. здесь
и в официальном документе .
. Рассмотрим пример, который вы хотите обработать для заказа с уникальным идентификатором order_id.поэтому очевидно, что вы хотите один успешный платеж за заказ.так что вы можете передать идемпотентный ключ при создании заряда.Вам не нужно сохранять данные карты пользователя, будет работать только одноразовый токен, созданный с помощью stripe.js
require "stripe"
Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
Stripe::Charge.create({
:amount => 2000,
:currency => "usd",
:source => "tok_visa", # obtained with Stripe.js
:description => "Charge for joseph.davis@example.com"
}, {
:idempotency_key => "FVnElesDto9UXlOr"
})
idempotency_key должен быть уникальным для каждого объекта начисления.