2016-05-17 9 views
1

ユーザーがウェブフックを使用してストライプから課金履歴を確認できるようにしようとしています。私は顧客ごとにストライプからデータを取得していますが、カードのソースデータを取得していません。NoMethodError:ストライプ使用時の未定義メソッド `source '

はここにここに私の初期化/ stripe.rbファイル

Stripe.api_key = STRIPE_SECRET 

class RecordCharges 
    def call(event) 
    charge = event.data.object 
    #Look up the user in our database 
    user = User.find_by(stripe_id: charge.customer) 
    #Record a charge in our database 
    c = user.charges.where(stripe_id: charge.id).first_or_create 
    c.update(
     stripe_id: charge.id, 
     amount: charge.amount, 
     amount_refunded: charge.soruce.amount_refunded, 
     card_last4: charge.source.last4, 
     card_brand: charge.source.brand, 
     card_exp_month: charge.source.exp_month, 
     card_exp_year: charge.source.exp_year, 
    ) 


    end 
end 

StripeEvent.configure do |events| 
    events.subscribe 'charge.succeeded', RecordCharges.new 
end 

だ私がユーザーを更新することができるよので、コントローラが動作していることが表示されますcards_controller.rb

class CardsController < ApplicationController 
    before_action :authenticate_user! 
    skip_after_action :verify_authorized 

    def update 
    customer = Stripe::Customer.retrieve(current_user.stripe_id) 
    subscription = customer.subscriptions.retrieve(current_user.stripe_subscription_id) 
    subscription.source = params[:stripeToken] 
    subscription.save 
    current_user.update(
     card_last4: params[:card_last4], 
     card_exp_month: params[:card_exp_month], 
     card_exp_year: params[:card_exp_year], 
     card_exp_year: params[:card_exp_year], 
     card_brand: params[:card_brand] 
    ) 
    redirect_to edit_user_registration_path, notice: "Successfully updated your card" 
    end 
end 

です。問題は、私がcard_brand、card_exp_yearなどを行うと、すべてがnillに設定されることです。

コンソールで購入を参照すると、次のような結果が得られます。

実行:イベント=ストライプ:: Event.retrieve私は、JSONは次のようになりevent.data.object

を実行して、オブジェクトのデータを見て、その後( "のevent_id")

=> #<Stripe::Event:0x3fc6dc914fa0 id=evt_18CFSRGgSrxZ3yXH1ktgY3M6> JSON: { 
    "id": "evt_18CFSRGgSrxZ3yXH1ktgY3M6", 
    "object": "event", 
    "api_version": "2016-03-07", 
    "created": 1463519427, 
    "data": {"object":{"id":"sub_8TBqDmWv6yFKOd","object":"subscription","application_fee_percent":null,"cancel_at_period_end":false,"canceled_at":null,"created":1463519427,"current_period_end":1466197827,"current_period_start":1463519427,"customer":"cus_8TBqPq3Y9npBz0","discount":null,"ended_at":null,"metadata":{},"plan":{"id":"pro-49","object":"plan","amount":4900,"created":1463398458,"currency":"usd","interval":"month","interval_count":1,"livemode":false,"metadata":{},"name":"Monthly pro-49","statement_descriptor":null,"trial_period_days":null},"quantity":1,"start":1463519427,"status":"active","tax_percent":null,"trial_end":null,"trial_start":null}}, 
    "livemode": false, 
    "pending_webhooks": 1, 
    "request": "req_8TBqLJDEuitTfN", 
    "type": "customer.subscription.created" 
} 

 => #<Stripe::Subscription:0x3fc6dc9243ec id=sub_8TBqDmWv6yFKOd> JSON: { 
    "id": "sub_8TBqDmWv6yFKOd", 
    "object": "subscription", 
    "application_fee_percent": null, 
    "cancel_at_period_end": false, 
    "canceled_at": null, 
    "created": 1463519427, 
    "current_period_end": 1466197827, 
    "current_period_start": 1463519427, 
    "customer": "cus_8TBqPq3Y9npBz0", 
    "discount": null, 
    "ended_at": null, 
    "metadata": {}, 
    "plan": {"id":"pro-49","object":"plan","amount":4900,"created":1463398458,"currency":"usd","interval":"month","interval_count":1,"livemode":false,"metadata":{},"name":"Monthly pro-49","statement_descriptor":null,"trial_period_days":null}, 
    "quantity": 1, 
    "start": 1463519427, 
    "status": "active", 
    "tax_percent": null, 
    "trial_end": null, 
    "trial_start": null 
} 

ソースはありません。それは私が必要なすべてのデータを持っているが、何らかの理由でそれが表示されていないソースオブジェクトを持っている必要があります。

さらに、私がevent.data.object.sourceを呼び出すと、メソッドのエラーが表示されません...これはそこにないので意味があります。

これは初めてストライプを統合しているため、セットアップで何かを見逃したかどうかわかりません。助けてくれてありがとう。

答えて

0

すべてのストライプイベントに同じデータが含まれているわけではありません。 customer.subscription.createdイベントの場合は、上記のJSONオブジェクトを取得します。この顧客が今このサブスクリプションにいることを示すだけです。

あなたが探しているのは、有料のものだと思います。 charge.succeededウェブフックをご覧ください。これには、支払に使用されるカードとなるソースオブジェクトが含まれます。

関連する問題