【问题标题】:Why is my Stripe API key not working in production?为什么我的 Stripe API 密钥在生产环境中不起作用?
【发布时间】:2021-05-01 12:26:59
【问题描述】:

已提出此问题,但似乎使用 Stripe Checkout 的格式已更改,以及加密凭据的格式(secrets.yml 到 credentials.yml)

所以在开发中我们一直在使用测试密钥并且没有问题。但是现在我们已经部署到 Heroku,每次我们尝试导航到 Stripe Checkout 时它都会中断。 Heroku 日志中的错误似乎很简单:

021-01-27T15:41:02.784429+00:00 app[web.1]: I, [2021-01-27T15:41:02.784365 #4]  INFO -- : [88208302-394a-4144-b0d7-61fc69369ce7] Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms | Allocations: 379)
2021-01-27T15:41:02.785456+00:00 app[web.1]: F, [2021-01-27T15:41:02.785380 #4] FATAL -- : [88208302-394a-4144-b0d7-61fc69369ce7]
2021-01-27T15:41:02.785459+00:00 app[web.1]: [88208302-394a-4144-b0d7-61fc69369ce7] 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.):

我运行 EDITOR=vim rails credentials:edit 来编辑 credentials.yml.enc

我有:

aws:
  access_key_id: xxx
  secret_access_key: xxx

stripe:
  stripe_secret_key: sk_live_xxx
  stripe_publishable_key: pk_live_xxx

secret_key_base: xxx

在我的 stripe.rb 文件中,我有:

Rails.configuration.stripe = {
    :publishable_key => Rails.application.credentials.dig(:stripe, :stripe_publishable_key),
    :secret_key => Rails.application.credentials.dig(:stripe, :stripe_secret_key)

}


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

当我进入 rails console 和 rails console --environment=production 并检查 Stripe.api_key 它完美地返回了确切的条带密钥。我不知道为什么错误说没有提供 Stripe API 密钥。我不明白什么?这是完成我的第一个“专业”网络应用程序(朋友的在线商店)的最后一步。

【问题讨论】:

  • 您正在部署哪个版本的 Rails?加密凭证在 5 和 6 之间发生了变化。根本原因指向 Rails.application.credentials.dig(:stripe, :stripe_secret_key) 未在生产中设置,或者主密钥设置不正确。这取决于 Rails 版本。如果您进入heroku console 并查看Rails.application.credentials.stripe[:stripe_secret_key] 返回什么,那将是调试的好东西(请注意语法差异,尽可能接近Rails 文档)。
  • @v3nkman 感谢您的回复!我在 Rails 6.0.3.4 上。我使用了 heroku 控制台并检查了返回 nil 的 Rails.application.credentials.stripe,而开发控制台中的相同命令返回了密钥。如何在生产中设置它们?
  • 你在heroku中设置了RAIILS_MASTER_KEY配置了吗?那是heroku config:set RAILS_MASTER_KEY=ABC123 Rails 6,heroku 需要它来解密文件
  • 我认为这是假设未将主密钥文件添加到不推荐的存储库中。
  • 你可以检查环境。使用 heroku config 进行 heroku 生产的 vars

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


【解决方案1】:

我明白了!就像 v3nkman 建议的那样,我检查了 heroku 控制台中的Rails.application.credentials.stripe。它什么也没返回,而开发控制台正在返回密钥。事实证明,当我们最初部署 Heroku 时,我在 Heroku 上设置了两个环境变量:PUBLISHABLE_KEYSECRET_KEY。但 Stripe.rb 文件中的 stripe.api_key 指向 Rails.application.credentials.dig(:stripe, :stripe_secret_key)。这在 Heroku 中是空的。所以我把 stripe.rb 改成了

Rails.configuration.stripe = {
    :publishable_key => ENV['PUBLISHABLE_KEY'],
    :secret_key => ENV['SECRET_KEY']

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

最初它不起作用,但那是因为来自前端的 Javascript 请求仍在使用测试密钥。一旦我将其更改为实时键,它就起作用了

【讨论】:

  • 不错!很高兴它成功了。我认为未来的目标是在一个地方管理凭据,但是使用 heroku env vars 就可以了。
猜你喜欢
  • 2019-05-25
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多