【问题标题】:NoMethodError: undefined method `source' when using StripeNoMethodError:使用 Stripe 时未定义的方法“源”
【发布时间】:2016-09-14 04:13:55
【问题描述】:

我正在努力做到这一点,以便我的用户可以使用网络挂钩从条带中查看他们的计费历史记录。我正在从每个客户的条带中获取数据,但我没有获取卡源数据。

这是我的初始化程序/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 等...都设置为零。

这是我在控制台中查找购买时得到的结果。

运行:event = Stripe::Event.retrieve("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"
} 

然后我通过运行 event.data.object 来查看对象数据

json 看起来像这样:

     => #<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 我会得到 no method 错误...这是有道理的,因为它不存在。

这是我第一次集成条纹,所以我不确定我是否在设置中遗漏了一些东西。谢谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails json stripe-payments


    【解决方案1】:

    并非所有 Stripe 事件都包含相同的数据。对于customer.subscription.created 事件,您将获得上述 JSON 对象。这只是表示该客户现在正在订阅此订阅。

    我认为您正在寻找的是收费的。查看charge.succeeded 网络钩子。它包括源对象,该对象将是用于支付的卡。

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 2021-01-19
      • 2013-04-24
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      相关资源
      最近更新 更多