8

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 

Odpowiedz

11

Tak, to wszystko, co musisz zrobić. Jeśli ładowanie się powiedzie, Stripe zwróci obiekt Charge i będzie można sprawdzić jego parametr. Jeśli opłata nie powiodła się, wyrzucilibyśmy wyjątek.

Cheers, Larry

PS Pracuję na wsparcie na pasek.

+1

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

+0

nie trzeba używać webhooks? –

+0

Czy możemy również polegać na status = "succeeded"? –

Powiązane problemy