一次付款条纹和铁轨4

时间:2016-07-02 07:59:38

标签: ruby ruby-on-rails-4 payment-gateway stripe-payments payment

我已经开始在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没有提出错误但没有应用折扣。

0 个答案:

没有答案