ユーザーがウェブフックを使用してストライプから課金履歴を確認できるようにしようとしています。私は顧客ごとにストライプからデータを取得していますが、カードのソースデータを取得していません。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を呼び出すと、メソッドのエラーが表示されません...これはそこにないので意味があります。
これは初めてストライプを統合しているため、セットアップで何かを見逃したかどうかわかりません。助けてくれてありがとう。