kontekstu:Sprawdzanie udanej śpią Stripe na szynach
używam Stripe kasę przyjąć jednorazową wypłatę w szynach. Mam kontrolera opłat, jak pokazano poniżej. Początkowo używałem paska webhook do słuchania charge.succeeded, ale działającego z powodu asynchronicznej natury webhooków. Mój przeniosłem logikę biznesową do kontrolera. Jeśli obciążenie klienta zakończyło się sukcesem, zapiszę klienta i inne szczegóły do bazy danych.
Moje pytanie:
Czy to sprawdzić wystarczy, aby zapewnić, że opłata jest sukces?
if charge["paid"] == true
Dokumentacja siniec za siniec :: Charge.create Zjednoczonych " Zwraca obiekt opłaty, jeśli ładunek udało. Podnosi błąd, jeśli coś pójdzie nie tak. Częstym źródłem błędu jest nieprawidłowy lub wygasł karty, lub ważna karta z niewystarczającym dostępnym saldem. "
My ChargesController:
class ChargesController < ApplicationController
def new
end
def create
# Amount in cents
@amount = 100
temp_job_id = cookies[:temp_job_id]
customer_email = TempJobPost.find_by(id: temp_job_id).company[:email]
customer = Stripe::Customer.create(
:email => customer_email,
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd',
:metadata => {"job_id"=> temp_job_id}
)
# TODO: charge.paid or charge["paid"]
if charge["paid"] == true
#Save customer to the db
end
# need to test this and refactor this using begin-->rescue--->end
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charges_path
end
end
Więc, technicznie, nie musi robić "jeśli opłata [" zapłacił "]" poprawne? Ponieważ jeśli opłata się nie powiedzie, wyjątek zostanie podniesiony i ta część kodu nie zostanie wykonana? – okysabeni
nie trzeba używać webhooks? –
Czy możemy również polegać na status = "succeeded"? –