Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 尝试将stripe.js与rails一起使用时,可以';我想不出来_Ruby On Rails - Fatal编程技术网

Ruby on rails 尝试将stripe.js与rails一起使用时,可以';我想不出来

Ruby on rails 尝试将stripe.js与rails一起使用时,可以';我想不出来,ruby-on-rails,Ruby On Rails,尝试按照此设置条纹。有一个非常好的针对rails的结帐指南: 但是,我找不到类似的使用stripe.js的指南(因为我想要自己的自定义表单。我在实现stripe时遇到了问题,我找到的唯一指南就是这个,它不能很好地与rails配合使用。有什么想法吗?下面是一个基于我的经验的快速指南(你可以找到我的虚拟rails stripe集成): 首先,将gem'stripe'添加到您的gem文件中。运行bundle install并重新启动您的Web服务器 创建charge\u controller.rbad

尝试按照此设置条纹。有一个非常好的针对rails的结帐指南:

但是,我找不到类似的使用stripe.js的指南(因为我想要自己的自定义表单。我在实现stripe时遇到了问题,我找到的唯一指南就是这个,它不能很好地与rails配合使用。有什么想法吗?

下面是一个基于我的经验的快速指南(你可以找到我的虚拟rails stripe集成):

首先,将
gem'stripe'
添加到您的gem文件中。运行
bundle install
并重新启动您的Web服务器

创建
charge\u controller.rb
add
charge\u customform
操作:

def charge_customform
    # Amount in cents
    @amount = 99

    # Get the credit card details submitted by the form
    customer = Stripe::Customer.create(
        :email => params[:email],
        :source  => params[:stripeToken]
    )

    # Create the charge on Stripe's servers - this will charge the user's card
    begin
      Stripe::Charge.create(
          :amount => @amount,
          :currency => 'usd',
          :customer => customer.id,
          :description => 'Example charge custom form'
      )
      redirect_to charges_thanks_path
      # remember to create a thanks.html.erb page in view/charges :)

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

end
在您看来,首先在页面中导入所需的JS:

<script type="text/javascript" src="https://js.stripe.com/v2/"></script>

然后设置可发布的密钥

<script type="text/javascript">
  Stripe.setPublishableKey('your_key_here');
</script>

Stripe.setPublishableKey('your_key_here');
添加自定义表单标签:

<%= form_tag charge_customform_charges_path, id: 'payment-form' do %>
  <span class="payment-errors"></span>

  <div class="form-group">
    <label>
      <span>Your email</span>
      <input value="<%= current_user.email if current_user %>" type="text" size="20" data-stripe="email">
    </label>
  </div>

  <div class="form-group">
    <label>
      <span>Card Number</span>
      <input type="text" size="20" data-stripe="number">
    </label>
  </div>

  <div class="form-group">
    <label>
      <span>Expiration (MM/YY)</span>
      <input type="text" size="2" data-stripe="exp_month">
    </label>
    <span> / </span>
    <input type="text" size="2" data-stripe="exp_year">
  </div>

  <div class="form-group">
    <label>
      <span>CVC</span>
      <input type="text" size="4" data-stripe="cvc">
    </label>
  </div>

  <input type="submit" class="submit" value="Submit Payment">
<% end %>

你的电子邮件
卡号
有效期(年月日)
/ 
CVC
最后添加JS以调用Stripe的API并使用令牌处理响应:

<script>
  $(function() {
    var $form = $('#payment-form');
    $form.submit(function(event) {
      // Disable the submit button to prevent repeated clicks:
      $form.find('.submit').prop('disabled', true);
      // Request a token from Stripe:
      Stripe.card.createToken($form, stripeResponseHandler);
      // Prevent the form from being submitted:
      return false;
    });
  });
  function stripeResponseHandler(status, response) {
    // Grab the form:
    var $form = $('#payment-form');
    if (response.error) { // Problem!
      // Show the errors on the form:
      $form.find('.payment-errors').text(response.error.message);
      $form.find('.submit').prop('disabled', false); // Re-enable submission
    } else { // Token was created!
      // Get the token ID:
      var token = response.id;
      // Insert the token ID into the form so it gets submitted to the server:
      $form.append($('<input type="hidden" name="stripeToken">').val(token));
      // Submit the form:
      $form.get(0).submit();
    }
  };
</script>

$(函数(){
var$form=$(“#付款单”);
$form.submit(函数(事件){
//禁用“提交”按钮以防止重复单击:
$form.find('.submit').prop('disabled',true);
//从Stripe请求令牌:
Stripe.card.createToken($form,stripeResponseHandler);
//阻止提交表单:
返回false;
});
});
函数stripeResponseHandler(状态、响应){
//抓取表格:
var$form=$(“#付款单”);
if(response.error){//问题!
//在表单上显示错误:
$form.find('.payment errors').text(response.error.message);
$form.find('.submit').prop('disabled',false);//重新启用提交
}否则{//令牌已创建!
//获取令牌ID:
var token=response.id;
//将令牌ID插入表单,以便将其提交到服务器:
$form.append($('').val(标记));
//提交表格:
$form.get(0.submit();
}
};
编辑


在我的第一个回答中,我提到了如何使用自定义表单设置计划和订阅。这仍然是一个很好的基础,但可能与这个问题没有100%的相关性。

我确实看过railscasts!但它有计划和订阅,我不确定我是否需要那么多…除非stripe需要。不,计划和订阅是n如果您不需要,则ot是必需的!我忘了教程提到订阅。对于一次性收费,您可以参考我在答案中发布的代码,首先检查
charges\u controller.rb中的代码,好的,谢谢!快速问题,这部分
Stripe.setPublishableKey('u key\u here'))
看来我需要把我的钥匙放在我的网站上。这样安全吗?还有,stripe提供了两把钥匙,我该如何使用这把钥匙?澄清一下,我需要添加的唯一控制器是费用?我整天都在办公桌上使劲敲我的头,试图让它正常工作。实际上有10个不同的教程。就是这个我知道,我不应该用这个盒子来表示感谢,但说真的,这是多么美好的一天,非常感谢你……)