将条带键保存到数据库Rails时的NoMethodError

时间:2016-03-31 23:53:16

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

我尝试在我的网站上创建托管条带帐户时,将我的用户的Stripe密码和可发布密钥保存到我的数据库中。

stripe_controller.rb

def create

  Stripe.api_key = Rails.configuration.stripe[:secret_key]
  @account = Stripe::Account.create(
    managed: true,
    country: params[:artist_payment_setting][:country],
    email: @artist.email,
    tos_acceptance: {
      ip: request.remote_ip,
      date: Time.now.to_i
    },
    legal_entity: {
      dob: {
        month: params[:artist_payment_setting][:month],
        day: params[:artist_payment_setting][:day],
        year: params[:artist_payment_setting][:year]
      },
      first_name: params[:artist_payment_setting][:first_name],
      last_name: params[:artist_payment_setting][:last_name],
      type: 'individual',
    }
  )

  if @account.save
    @payment = @artist.create_artist_payment_setting(
        currency: @account.default_currency,
        country: @account.country,
        stripe_id: @account.id,
        stripe_publishable_key: @account.keys.publishable, ***********problem********
        stripe_secret_key: @account.keys.secret            ***********problem********
      )
  end

  redirect_to artist_path(@artist)
end

不幸的是,我一直得到NoMethodError (undefined method 'publishable' for #<Array:0x007f57d83edaf0>)secret一样。

API响应

{
  keys:
    {
      secret: "secret_key"
      publishable: "publish_key"
    }
 }

无法弄清楚如何获取这些密钥。

1 个答案:

答案 0 :(得分:0)

我认为这是Stripe的一个错误。似乎@account的行为类似于哈希,因此@account.keys会为对象返回一个键数组(在这种情况下具有讽刺意义[:keys]),而不是您期望的那样。

这不在文档中,但将对象视为哈希格式可能会解决您的问题:

@account[:keys][:publishable]

简而言之,#capture中的Stripe::Payment方法存在类似的错误,因为这也是Ruby保留字。不确定为什么Stripe习惯在他们的回复中使用保留字。