如何在 Rails 4 应用程序中从 javascript 生成的按钮调用控制器功能?
How to call controller function from javascript generated button in Rails 4 app?
我已将 Stripe.js 集成到我的 rails 应用程序中。该应用程序生成 "Pay with Card" 按钮。我想知道如何调用控制器函数来调用 Stripe API 以接收付款。
show.html.erb:
<div class="col-xs-12">
<div class="btn-group pull-right" role="group" aria-label="..." style="margin-top:10px;">
<%= link_to 'Back to Products', products_path, class: "btn btn-default btn-info" %>
<%= button_to 'Pay with Card',
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A month's subscription"
data-amount= "<%= @shopping_cart.total*100 %>"
data-locale="auto"></script> %>
<!--
<button type="button" class="btn btn-default btn-success">
<span class="fa fa-shopping-cart"></span>
Checkout
</button> -->
</div>
</div>
shopping_carts_controller.rb
def checkout
@shopping_cart.process_payment stripe_params
redirect_to products_path
flash[:notice] = "Succefully made payment."
end
如何调用 checkout 方法?
通过以下步骤在 stripe 中收取费用
1) 从用户处获取卡的详细信息
2) 将卡片详细信息提交到 stripe
3) 条纹 returns 你一个令牌
4) 使用stripe token通过stripe向用户收费charge API
这可以是从用户那里获取卡片详细信息的视图
<%= form_tag charge_amount_path do %>
<article>
<% if flash[:error].present? %>
<div id="error_explanation">
<p><%= flash[:error] %></p>
</div>
<% end %>
<label class="amount">
<span>Amount: .00</span>
</label>
</article>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="some-key"
data-description="A month's subscription"
data-amount="500"
data-locale="auto"></script>
<% end %>
当用户提交此表单时,stripe returns stripe token,您可以使用此 token 来创建费用。
有一个控制器方法,这将是提交表单后调用的方法
def charge_amount
charge = Stripe::Charge.create({
:amount => 100,
:card => params[:stripeToken],
:description => "blah-blah,
:currency => 'usd'
})
end
来自 stripe 的此方法的参数将类似于
Parameters: {"utf8"=>"✓", "authenticity_token"=>"rhYPiRCDLQJ4F9/B09TKgiyS11YGvP34hI5/Bi9n2nB9BbiBQXAMZWxdwkjVEkiy5+PJaKMnqraWSeu+a0Fn8Q==", "stripeToken"=>"tok_198sjvLeNQnnrmxRqgbTq12n", "stripeTokenType"=>"card", "stripeEmail"=>"vcjhewv@gmail.com"}
您需要确保您的 Checkout HTML 片段位于 <form>
标签内,并且 action
设置为 [=12] 的 URL =].
我已将 Stripe.js 集成到我的 rails 应用程序中。该应用程序生成 "Pay with Card" 按钮。我想知道如何调用控制器函数来调用 Stripe API 以接收付款。
show.html.erb:
<div class="col-xs-12">
<div class="btn-group pull-right" role="group" aria-label="..." style="margin-top:10px;">
<%= link_to 'Back to Products', products_path, class: "btn btn-default btn-info" %>
<%= button_to 'Pay with Card',
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A month's subscription"
data-amount= "<%= @shopping_cart.total*100 %>"
data-locale="auto"></script> %>
<!--
<button type="button" class="btn btn-default btn-success">
<span class="fa fa-shopping-cart"></span>
Checkout
</button> -->
</div>
</div>
shopping_carts_controller.rb
def checkout
@shopping_cart.process_payment stripe_params
redirect_to products_path
flash[:notice] = "Succefully made payment."
end
如何调用 checkout 方法?
通过以下步骤在 stripe 中收取费用
1) 从用户处获取卡的详细信息
2) 将卡片详细信息提交到 stripe
3) 条纹 returns 你一个令牌
4) 使用stripe token通过stripe向用户收费charge API
这可以是从用户那里获取卡片详细信息的视图
<%= form_tag charge_amount_path do %>
<article>
<% if flash[:error].present? %>
<div id="error_explanation">
<p><%= flash[:error] %></p>
</div>
<% end %>
<label class="amount">
<span>Amount: .00</span>
</label>
</article>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="some-key"
data-description="A month's subscription"
data-amount="500"
data-locale="auto"></script>
<% end %>
当用户提交此表单时,stripe returns stripe token,您可以使用此 token 来创建费用。
有一个控制器方法,这将是提交表单后调用的方法
def charge_amount
charge = Stripe::Charge.create({
:amount => 100,
:card => params[:stripeToken],
:description => "blah-blah,
:currency => 'usd'
})
end
来自 stripe 的此方法的参数将类似于
Parameters: {"utf8"=>"✓", "authenticity_token"=>"rhYPiRCDLQJ4F9/B09TKgiyS11YGvP34hI5/Bi9n2nB9BbiBQXAMZWxdwkjVEkiy5+PJaKMnqraWSeu+a0Fn8Q==", "stripeToken"=>"tok_198sjvLeNQnnrmxRqgbTq12n", "stripeTokenType"=>"card", "stripeEmail"=>"vcjhewv@gmail.com"}
您需要确保您的 Checkout HTML 片段位于 <form>
标签内,并且 action
设置为 [=12] 的 URL =].