Я обрабатываю платежи в электронной коммерции или на рынке. Пользователи заполняют форму заказа с адресом доставки, информацией о выставлении счетов и т. Д. И отправляют. Если форма заполнена без ошибок, форма работает по назначению, то есть заказ сохраняется и плата заряжается.Rails 4 - Обработка карточных платежей при возникновении ошибки формы
Проблема: когда форма имеет ошибку (пример: zip пуст), страница формы возвращает сообщение об ошибке. Но если информация о кредитной карте верна, пользователь получает плату. Мне нужно, чтобы карта была списана только при отсутствии ошибок формы.
Вот мой метод create
в моем контроллере заказов. Я думал о перемещении блока блокировки полосы внутри блока response_to, но это не сработало, потому что заказ должен быть сохранен только после утверждения оплаты.
Поскольку это торговая площадка, у меня есть блок передачи платежей ниже, а также часть платежа передается продавцу. Этот код должен запускаться только после обработки платежа и сохранения заказа.
def create
@order = Order.new(order_params)
Stripe.api_key = ENV["STRIPE_API_KEY"]
token = params[:stripeToken]
begin
charge = Stripe::Charge.create(
:amount => (@listing.price * 100).floor,
:currency => "usd",
:card => token,
:description => "Charge from ABC"
)
respond_to do |format|
if @order.save
format.html { redirect_to thankyou_path(:id => @order.id) }
format.json { render action: 'show', status: :created, location: @order }
AutoNotifier.orderconf_email(current_user, @order).deliver
AutoNotifier.sellerconf_email(current_user, @seller, @order).deliver
else
format.html { render action: 'new' }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end #end respond_to
if [email protected]?
transfer = Stripe::Transfer.create(
:amount => (((@listing.price * 97.1) - 30) * 0.8).floor, #converting to cents per stripe requirement. 80 percent in cents goes to seller.
:currency => "usd",
:recipient => @seller.recipient
)
end #end transfer
rescue Stripe::CardError => e
flash[:danger] = e.message
end #end rescue
end #end begin
end #end create
Вы нашли решение? – Tobias
да, я использовал вариант решения, размещенный ниже Deep. Извините за задержанный ответ. меня здесь не много. – Moosa