我已经开始在stripe.com上的教程中使用条带实现系统一次性付款。但是在进行时不考虑折扣和金额保持不变。
`enter code here`enrollments_controller.rb that will include the charge
def create
@disable_navbar = true
@disable_footer = true
@lecture = Lecture.find_by(params[:id])
@enrollment = Enrollment.new(enrollment_params)
# Test for stripe
if @enrollment.valid?
begin
@amount = @lecture.amount
@final_amount = @amount
@code = params[:couponCode]
if @code.blank?
@discount = get_discount(@code)
if @discount.nil?
flash[:error] = 'Coupon code is not valid or exprired'
redirect_to new_enrollment_path
return
else
@discount_amount = @amount * @discount
@final_amount = @amount * @discount_amount.to_i
end
charge_metadata = {
:coupon_code => @code,
:coupon_discount => (@discount * 100).to_s + '%'
}
end
charge_metadata ||= {}
customer = Stripe::Customer.create(
:email => params[:stripeEmail],
:source => params[:stripeToken]
)
Stripe::Charge.create(
:customer => customer.id,
:amount => @final_amount,
:description => 'Rails Stripe customer',
:currency => 'usd',
:metadata => charge_metadata
)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to new_enrollment_path
end
@enrollment.save
ConfirmationEnrollmentMailer.confirmation_enrollment(current_user, @lecture, @enrollment).deliver
redirect_to profile_path(current_user)
flash[:success] = "You have successfully enrolled."
else
flash[:error] = 'You have already registered for this class'
redirect_to profile_path(curren)
end
end
private
def enrollment_params
params.require(:enrollment).permit(:user_id, :lecture_id, :amount)
COUPONS = {
'TEST' => 0.10
}
def get_discount(code)
code = code.gsub(/ +/, '')
code = code.upcase
COUPONS[code]
end
And here is the form in enrollments/new
<%= form_for @enrollment do |f| %>
<% if flash[:error].present? %>
<div class="error_explanation">
<p><%= flash[:error] %></p>
</div>
<% end %>
<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.hidden_field :lecture_id, value: @lecture.id %>
<%= label_tag(:couponCode, 'Enter Coupon') %>
<%= text_field_tag(:couponCode) %>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="PUBLISHABLE KEY (is set in secret.yml)"
data-description="Your purchase"
data-locale="auto">
</script>
<% end %>
Rails没有提出错误但没有应用折扣。