6

我不确定如何将 Publishable 密钥放入我的 JavaScript 代码中。当我将可发布键的值直接放入 JavaScript 时,它可以正常工作。当我尝试使用环境变量时它不起作用。

配置/初始化程序/stripe.rb

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

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

javascripts/charges.js.erb

Stripe.setPublishableKey(<%= Rails.configuration.stripe[:publishable_key] %>);

var stripeResponseHandler = function(status, response) {
  var $form = $('#payment-form');

  if (response.error) {

        $form.find('.payment-errors').text(response.error.message);
        $form.find('button').prop('disabled', false);
    } else {

        var token = response.id;

        $form.append($('<input type="hidden" name="stripeToken" />').val(token));

        $form.get(0).submit();
    }
};

jQuery(function($) {
    $('#payment-form').submit(function(e) {
      var $form = $(this);


      $form.find('button').prop('disabled', true);

      Stripe.createToken($form, stripeResponseHandler);

      return false;
    });
});
4

3 回答 3

5

不完全是一个解决方案,但我喜欢 Railscast 方式(http://railscasts.com/episodes/288-billing-with-stripe)使用环境变量设置元标记,然后使用 Javascript 调用元中的值标签。您想要的位从大约 4 分 10 秒开始

<%= tag :meta, :name => "stripe-key", :content => STRIPE_PUBLIC_KEY %>

那么JS代码就是:

Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))

我不喜欢直接将环境变量插入 JS。

于 2013-11-11T15:50:58.823 回答
0

你所拥有的看起来应该可以工作。当您启动服务器时,您是否输入了正确的密钥?

PUBLISHABLE_KEY=pk_####_################ SECRET_KEY=sk_####_################rails s

于 2013-11-11T17:34:45.780 回答
0

虽然我不认为在 Javascript 中存储 Stripe 详细信息是明智的,但您可以使用调用的 gemgon将变量加载到 JS 中:

#app/controllers/your_controller.rb
gon.push({
  :user_id => 1,
  :user_role => "admin"
})

#app/assets/javascripts/your_javascript.js
gon.variable_name

您必须将其添加到布局文件中:

<head>
  <title>some title</title>
  <%= include_gon %>
  <!-- include your action js code -->
  ...

即使在开发中也要加载 ENV 变量,然后我会使用一个名为 gemFigaro,它基本上允许您在任何状态下加载 ENV 变量:

#app/config/application.yml
YOUR_ENV_VAR: 'information'
于 2013-11-11T17:40:57.467 回答