控制器中缺少 Stripe API 密钥

问题描述 投票:0回答:2

我正在尝试设置 Stripe 结帐,如本 GoRails 剧集

中所述

我已经使用Figaro gem在application.yml中定义了publishable_key和secret_key,所以在我的config/initializers/stripe.rb中我有这个代码

Rails.configuration.stripe = {
  :publishable_key => ENV["public_key"],
  :secret_key      => ENV["private_key"]
}

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

puts Rails.configuration.stripe[:publishable_key]
puts Rails.configuration.stripe[:secret_key]
puts Stripe.api_key

现在,我知道到目前为止一切都很好,因为服务器启动时密钥会打印在控制台中。

但是,当操作转到控制器时,我收到一条消息:

“未提供 API 密钥。使用“Stripe.api_key = 设置您的 API 密钥” “。您可以从 Stripe Web 界面生成 API 密钥。 请参阅 https://stripe.com/api 了解详细信息,或者发送电子邮件至 [email protected](如果) 你有什么问题吗?”

我可以让它工作的唯一方法是通过

在控制器操作中重新设置条带 API 密钥
class CheckoutsController < ApplicationController
  
  def show
    Stripe.api_key = Rails.configuration.stripe[:secret_key] #<---Have to re-set the API key

    current_user.set_payment_processor :stripe
    
    @checkout_session = current_user.payment_processor.checkout(
      # mode: "payment",
      # line_items: "price_1KuweRFkaCcck7q2JSu01hHi"
      mode: "subscription",
      line_items: "price_1KuyuVFkaCcck7q23EJLLpra"
      )    
  end  
end

为什么控制器无法识别初始化程序中定义的内容?

ruby-on-rails controller stripe-payments initializer
2个回答
0
投票

对于我来说,从“env”切换到“凭据”方法就做到了!: 首先使用以下命令设置凭证文件:

 EDITOR=nano rails credentials:edit

然后像这样填充它:

secret_key_base: xxxxxx 
stripe_publishable_key: xxxxxxxxx
stripe_secret_key: xxxxx

保存它。

然后在我的 PaymentController 中(您可以在任何涉及条带的控制器中转置)我添加了一个方法来设置 api_key:

before_action :set_stripe_key
....
private
def set_stripe_key
 Rails.env.production? 
   Stripe.api_key =  Rails.application.credentials.stripe_secret_key
 else
   Stripe.api_key = Rails.configuration.stripe[:secret_key]
 end
end

然后重新启动您的应用程序/服务器,一切都应该很好

注意:直到今天我仍然不知道为什么“env”方法在生产中不起作用......


-1
投票

这是一个变量范围问题。控制器中使用的条带实例与初始化程序中使用的条带实例不同。我会从一开始就更密切地关注该视频,并使用与该视频相同的策略。

© www.soinside.com 2019 - 2024. All rights reserved.