Ruby on rails 条带-未提供API密钥?

Ruby on rails 条带-未提供API密钥?,ruby-on-rails,stripe-payments,Ruby On Rails,Stripe Payments,我正在努力解决这个错误,没有提供API密钥。使用“Stripe.API_key=”设置API密钥。您可以在Rails应用程序中通过Stripe web界面一步一步地生成API密钥 从我看来,一切看起来都很好,但它一直在回复那个通知。有什么建议吗 收费主任: class ChargesController < ApplicationController def new end def create # Amount in cents @

我正在努力解决这个错误,没有提供API密钥。使用“Stripe.API_key=”设置API密钥。您可以在Rails应用程序中通过Stripe web界面一步一步地生成API密钥

从我看来,一切看起来都很好,但它一直在回复那个通知。有什么建议吗

收费主任:

  class ChargesController < ApplicationController

    def new
    end

    def create
      # Amount in cents
      @amount = 500

      customer = Stripe::Customer.create(
        :email => 'example@stripe.com',
        :card  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => 'Rails Stripe customer',
        :currency    => 'usd'
      )

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to charges_path
    end

  end
终端轨迹 于2014-12-12 22:15:08+0100开始127.0.0.1的邮政“/收费”

    Processing by ChargesController#create as HTML

      Parameters: {"utf8"=>"✓", "authenticity_token"=>"XXX", "stripeToken"=>"tok_1590kf2NNSl5uX0kXE9XXX", "stripeTokenType"=>"card", "stripeEmail"=>"USER@gmail.com"}

    Completed 500 Internal Server Error in 2ms



    Stripe::AuthenticationError - No API key provided. Set your API key using "Stripe.api_key = <API-KEY>". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions.:

       () Users/javier/.rvm/gems/ruby-2.1.2/bundler/gems/stripe-ruby-9c7ebd21c973/lib/stripe.rb:71:in `request'

       () Users/javier/.rvm/gems/ruby-2.1.2/bundler/gems/stripe-ruby-9c7ebd21c973/lib/stripe/api_operations/create.rb:6:in `create'

       () Users/javier/Desktop/definitive/app/controllers/charges_controller.rb:10:in `create'
由ChargesController处理#创建为HTML 参数:{“utf8”=>“✓", "真实性令牌“=>”XXX“、”stripeToken“=>”tok_1590kf2NNSl5uX0kXE9XXX“、”stripeTokenType“=>”卡片“、”stripeEmail“=>”USER@gmail.com"} 在2ms内完成500个内部服务器错误 Stripe::AuthenticationError-未提供API密钥。使用“Stripe.API_key=”设置API密钥。您可以从Stripe web界面生成API密钥。看见https://stripe.com/api 如需了解详细信息,请发送电子邮件support@stripe.com如果您有任何问题: ()Users/javier/.rvm/gems/ruby-2.1.2/bundler/gems/stripe-ruby-9c7ebd21c973/lib/stripe.rb:71:在“请求”中 ()Users/javier/.rvm/gems/ruby-2.1.2/bundler/gems/stripe-ruby-9c7ebd21c973/lib/stripe/api_operations/create.rb:6:in'create' ()用户/javier/Desktop/definal/app/controllers/charges_controller.rb:10:in'create' 测试包括secrets.yml中的密钥,正如@sealocal在评论中所建议的,但仍然是相同的问题:

development:
 secret_key_base: key
 publishable_key: anotherkey
 secret_key: anotherkey

test:
 secret_key_base:key
production:
 secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
 publishable_key: <%= ENV["publishable_key"] %>
 secret_key: <%= ENV["secret_key"] %>
开发:
秘密密钥库:密钥
可发布密钥:另一个密钥
密钥:另一个密钥
测试:
秘密密钥库:密钥
制作:
机密密钥库:
可发布密钥:
密钥:

您需要将条带键存储在环境变量中,以便
config/initializers/Stripe.rb
可以读取它们

在Rails 4.1+中,您可以使用:

注意:在YAML中定义嵌套键值对时,请正好使用两个空格。也就是说,
development
下的键应该缩进两个空格,而不是制表符。这是因为YAML文件严格依赖缩进

config/initializers/stripe.rb
中:

Rails.configuration.stripe = {
  :publishable_key => Rails.application.secrets.publishable_key,
  :secret_key      => Rails.application.secrets.secret_key
}

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

Stripe支持部门回复了我的电子邮件,他们的解决方案运行良好:

config/initializers/stripe.rb

 Rails.configuration.stripe = { 
  :publishable_key => 'pk_test_thekey', 
  :secret_key => 'sk_test_thekey'
}   

在他们的回答中,您似乎正在尝试将API密钥设置为以密钥命名的ENV变量,该变量可能不是有效的密钥。您需要将其更改为ENV['NAME_OF_ENV_VAR_HERE'],或直接访问密钥,如上面包含的行

这些是您的真实密钥吗?我认为您不需要
ENV['pk\u test\u NYW7gGgMYnx4HznUXLyti5r3']
。如果您正在对值进行硬编码,只需将
'pk\u test\u NYW7gGgMYnx4HznUXLyti5r3'
。以前的键,不再使用。经过测试,但它始终返回相同的通知。您的条带密钥存储在哪里?您应该有一个设置环境变量的文件。它看起来像什么?@config/initializers/stripe.rb中的@sealocal,这不对吗?@malditojavi我认为你做得不对。我想我的答案可能会对你有所帮助。经过测试,在注释中用我包含的代码进行了更新,但仍然是同一个问题。如果你使用的是
secrets.yml
,你必须使用以下语法访问你的秘密:
Rails.application.secrets.publishible\u key
。更新了答案,以显示您的
条带.rb
应该是什么样子。问题中的代码没有显示您使用了该语法。这有帮助吗?如果我理解得很好,您建议在我的secrets.yml中包含可发布的密钥:Rails.application.secrets.publishable\u key?这也不起作用。不,该调用应该放在您的
stripe.rb
文件中。我想说的一点是,在你的
条带.rb
中有一行是这样的:
:publishable\u key=>ENV['pk\u test\u key']
,但是你应该使用
Rails.application.secrets.pk\u test\u key
来代替
ENV['pk\u test\u key']
。无论您使用的是名称
pk\u test\u key
还是
publishible\u key
,只要它们在
stripe.rb
secrets.yml
之间匹配就行了。如果这仍然不能解决问题,请尝试停止本地服务器,运行
$spring stop
,然后
$rails
重新启动。
Rails.configuration.stripe = {
  :publishable_key => Rails.application.secrets.publishable_key,
  :secret_key      => Rails.application.secrets.secret_key
}

Stripe.api_key = Rails.configuration.stripe[:secret_key]
 Rails.configuration.stripe = { 
  :publishable_key => 'pk_test_thekey', 
  :secret_key => 'sk_test_thekey'
}