8

Bağlam Stripe kullanarak başarılı bir ücret karşılığında denetleniyor: Ben raylar içinde tek seferlik bir ödeme kabul etmek Stripe ödeme kullanıyorumraylar için

. Aşağıda gösterildiği gibi bir şarj kontrol cihazım var. Başlangıçta, şarjı dinlemek için şerit webhook'u kullanıyordum, ancak web kitaplarının asenkron doğası nedeniyle bazı sorunlara yol açıyordum. Benim iş mantığını denetleyiciye taşıdım. Müşteri ücreti bir başarıysa, müşteriyi ve diğer ayrıntıları db'ye kaydediyorum.

Sorum:

bir ücret başarılı olmasını sağlamak için yeterli bu onay mı? bir şeyler ters giderse şarj başarılı olursa bir ücret nesnesi döndürür

if charge["paid"] == true 

Çizgili :: Charge.create devletler için Stripe dokümantasyon, ". bir hata Artırdı. hatasının yaygın kaynağı geçersiz veya süresi dolmuş karttır, veya yetersiz kullanılabilir bakiye ile geçerli bir kart. "

Benim 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 

cevap

11

Evet, yapmanız gereken tek şey bu. Şarj başarılı olursa, Stripe bir Charge nesnesini döndürür ve paid parametresini kontrol edebilirsiniz. Ücret başarısız olursa, bir istisna atardık.

Alkış, ben Stripe de Destek üzerinde çalışmak Larry

PS.

+1

Yani, teknik olarak, eğer ücret ["ödenmiş"] doğruysa yapması gerekmiyor? Çünkü ücret başarısız olursa, istisna kaldırılacak ve kodun bu bölümü yürütülmeyecek mi? – okysabeni

+0

Webhooks kullanmaya gerek yok mu? –

+0

Durum = "başarılı" ya da güvenebilir miyiz? –