强制 Rails Paypal gem 使用 Sandbox 而不是 Live

Posted

技术标签:

【中文标题】强制 Rails Paypal gem 使用 Sandbox 而不是 Live【英文标题】:Force Rails Paypal gem to use Sandbox instead of Live 【发布时间】:2016-08-29 02:40:50 【问题描述】:

一个小故事:我在 Heroku 上安装了一个开发服务器,它在生产模式下运行。

我对安装在这个应用程序中的paypal-sdk-rest gem 不是很熟悉(实际上我是 RoR 的新手)。

阅读此处https://github.com/paypal/PayPal-Ruby-SDK 的文档,我发现有一个配置 yml 文件 (config/paypal.yml),其中包含用于开发和生产环境的 Sandbox 和 Live 的 client_id 和 client_secret。并在config/initializers/paypal.rb 中引用它。

当我在本地主机上工作时,我可以在 Sandbox 上创建付款,当我在我的 AWS 服务器上时,我可以在 Live 上创建付款。但在 Heroku 上,我需要它在 Sandbox 而不是 Live 上创建付款。所以我在paypal.rb 中评论了对paypal.yml 的引用,并在paypal.rb 中说明了这一点:

#this was added 
PayPal::SDK.configure(
   :mode => "sandbox",
   :client_id => "my-sandbox-id",
   :client_secret => "my-sandbox-secret"
)

在将文件发送到 Heroku 之前,我正在 localhost 上进行测试,并且我希望看到沙盒支付页面,因为它在删除配置文件之前正在工作。我收到此消息错误:

"name"=>"BUSINESS_VALIDATION_ERROR", "details"=>["field"=>"validation_error", "issue"=>"不正确的模板 Id."], "message"=>"验证错误。", "信息链接"=>"https://developer.paypal.com/webapps/developer/docs/api/#BUSINESS_VALIDATION_ERROR", "debug_id"=>"这里有一些 id"

附加信息:在删除配置文件之前,我只是将开发信息复制到生产环境中。我在 Heroku 上进行测试并得到同样的错误。

各位有什么想法吗?

【问题讨论】:

【参考方案1】:

我会通过环境变量添加密钥。这样,每个环境都会引用正确的密钥,而您不必将它们签入源代码管理。如果你想走那条路,https://github.com/laserlemon/figaro 是一个很好的宝石。或者,您可以设置 config/paypal.yml 文件以引用不同的环境。那看起来更像:

development:
  :mode: "sandbox"
  :client_id: "my-sandbox-id"

production:
  :mode: "not-sandbox-er-whatever"
  :client_id: "my-not-sandbox-id"

【讨论】:

是的。这就是我最初得到的。但我尝试在 Heroku 上让两者都在沙盒上工作。然后我得到那个错误 我猜测配置文件的用途不仅仅是被 paypal.rb 引用,但我可能是错的。无论如何,使用环境变量应该可以解决这个问题。您可以通过让 paypal.rb 引用您使用 heroku 手动导出的变量来测试它。

以上是关于强制 Rails Paypal gem 使用 Sandbox 而不是 Live的主要内容,如果未能解决你的问题,请参考以下文章

paypal gem 多个帐户 ruby​​ on rails

从 Paypal 获取 first_name(和其他信息)并使用 paypal-recurring gem 创建 Rails Devise 帐户

是否有任何 gem 可以将 paypal 按钮 api 集成到 rails 应用程序? [关闭]

金额无效 paypal_adaptive gem rails

在 Rails 控制器中包含库时,Paypal SDK Ruby 错误

是否为 rails 应用程序在 Gemfile 中强制指定 Gem 版本