I am trying to integrate Stripe into my Rails app. I followed the tutorial on their website and have most of it working. My 1 question is how to dynamically change the price charged to customers.
Right now @amount is hardcoded at 500. How do I pass @price (from new.html.erb or the controller) to the 'create' action?
@project = Project.find(params[:project_id])
number_of_testers = @project.testers
@price = 30 * number_of_testers
# Amount in cents
# @amount = 500
customer = Stripe::Customer.create(
:email => params[:stripeEmail],
:source => params[:stripeToken]
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd'
rescue Stripe::CardError => e
flash[:error] = e.message
<%= form_tag charges_path do %>
<% if flash[:error].present? %>
<p><%= flash[:error] %></p>
<% end %>
<span>Amount: $<%= @price %></span>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="Buy usability testing credits"
data-amount="<%= @price*100 %>"
<% end %>
You can either pass @price via the params hash by adding a hidden form field or you can calculate it in your new action in the controller and then store it in a session. Then access that value from the session. For example:
def new @price = 30 * number_of_testers session[:price] = @price end def create @amount = session[:price] ...rest of your code here... session.delete(:price) end
If you go the hidden form field route instead of using sessions you just have to whitelist the hidden field attribute in your controller and it will be passed as part of the params hash with the other form fields values.