2016-10-04 66 views
0

我想要接收實時的條帶化Web鉤子,爲了做到這一點,我必須使用初始化程序。使用Stripe_events gem。我不太熟悉初始值設定項,但我在這裏學習!如何在初始化程序中調用處理程序方法?創建webhooks

- 我想用我的event(webhook)用handler_method調用。

我的初始化/ stripe.rb

Rails.configuration.stripe = { 
    :publishable_key => ENV['STRIPE_PUBLISHABLE_KEY'], 
    :secret_key => ENV['STRIPE_SECRET_KEY'] 

} 

Stripe.api_key = Rails.configuration.stripe[:secret_key] 


StripeEvent.configure do |events| 
    events.subscribe 'charge.succeeded', ReservationsController.new 
    events.all = AllEvents.new 



end 

正如你可以看到我設置events.all = AllEvents.new
我想所有的事件調用此一個stripe_handler。基於event.type是什麼。 'charge.succeeded'

if event.type == 'charge.succeeded' 

etc........ 

end 
在app/stripe_handlers

/all_events.rb

class AllEvents 
    def call(event) 

    if event.type == 'charge.succeeded' 

     reservation = Reservation.find_by_transaction_id(event.object.id) 
     reservation.update_attributes pay_completed: true 

     # reservation = Reservation.find_by_transaction_id 
    elsif event.type == 'customer.created' 


    elsif event.type == 'account.application.deauthorized' 

      # look out for account.updated and check if the account ID is unknown 

    end 
end 
end 

所有的一切,我想將events.all值發送到handler_methods在那裏我可以爲每個網絡掛接操作。

+0

嗯,當你說「的handle_method所有值」,你的意思是像個人的方法來處理各種事件?如果是這種情況,那麼我不明白什麼阻止你製作個人「handler_methods」。 – Rashmirathi

+0

是的!像這個'def call(event)'是假設接收事件,然後在裏面我使用事件值,這是剛剛發送的webhook特定事件 –

回答

1

我想把它放在評論中,但它太大了評論。在快速閱讀文檔here後,我在下面寫下了我對如何使用寶石的理解。因此,initializers/stripe.rb你需要類似下面的代碼塊。您只需在配置塊中調用events.subscribe,其中包含事件名稱和將處理該事件的類實例。您不需要僅使用一個對象處理所有事件。

StripeEvent.configure do |events| 
    events.subscribe 'charge.succeeded', ChargeSucceeded.new 
    event.subscribe 'customer.created', CustomerCreated.new 
    event.subscribe 'account.application.deauthorized', Deauthorised.new 
end 

隨後處理事件的類會是這個樣子:

class ChargeSucceeded 
    def call(event) 
    #Code to handle event 'charge.succeeded' 
    end 
end 

class CustomerCreated 
    def call(event) 
    #Code to handle event 'customer.created' 
    end 
end 

class Deauthorised 
    def call(event) 
    #Code to handle event 'account.application.deauthorized' 
    end 
end 
+0

是的,這是我最初的想法,直到有支持的人說,將所有事件合併爲一個好主意,但是生病就是這樣做。你也爲每一個創建單獨的控制器?那是很多控制器?或者我可以在控制器中有多個類? –

+0

@MichaelLombardo對不起,這些不是鐵軌控制器。這些只是一個普通的ruby類,它有一個'call'方法並以'event'作爲參數。我編輯了我的答案,不使用單詞控制器,因爲它有點混亂。所有控制器級別的處理都是在gem中完成的,gem只使用一個控制器,參見[這裏](https://github.com/integrallis/stripe_event/blob/master/app/controllers/stripe_event/webhook_controller.rb) – Rashmirathi

+0

Im獲取錯誤/Users/michael/Desktop/projects/ScribeOwl/config/initializers/stripe.rb:13:in'在中阻止:未初始化的常量ChargeSucceeded –

相關問題