Contesto:Controllo per una carica di successo usando banda per le rotaie
Sto usando Stripe cassa di accettare il pagamento una tantum a rotaie. Ho un controller delle cariche come mostrato di seguito. Inizialmente utilizzavo stripe webhook per ascoltare charge.succeeded, ma ho riscontrato alcuni problemi dovuti alla natura asincrona dei webhook. My I ha spostato la business logic sul controller. Se l'addebito per il cliente è un successo, allora salvi il cliente e alcuni altri dettagli sul db.
La mia domanda:
È questo controllo sufficiente a garantire che una carica è successo?
if charge["paid"] == true
La documentazione livido per livido :: Charge.create Uniti ", Restituisce un oggetto carica se la carica è riuscito. Genera un errore se qualcosa va storto. Una fonte comune di errori è una scheda valida o scaduta, o una carta valida con un bilancio disponibile insufficiente. "
mio 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
Quindi, tecnicamente, non ha bisogno di fare 'se carica [" pagato "]' corretto? Perché se la carica fallisce, l'eccezione verrà sollevata e quella sezione del codice non verrà eseguita? – okysabeni
non c'è bisogno di usare i webhooks? –
Possiamo contare anche sullo stato = "riuscito"? –