8

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 

risposta

11

Sì, questo è tutto quello che devi fare. Se l'addebito è riuscito, Stripe restituirà un oggetto Charge, e potrai controllare il suo parametro paid. Se l'addebito fallisse, faremo un'eccezione.

Cheers, Larry

PS Io lavoro su supporto a banda.

+1

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

+0

non c'è bisogno di usare i webhooks? –

+0

Possiamo contare anche sullo stato = "riuscito"? –