2015-01-14 26 views
5

Tôi đang sử dụng Rails 4.2 và cố gắng tích hợp Stripe Checkout (https://stripe.com/docs/checkout/guides/rails) trong ứng dụng đường ray của mình và có kịch bản mà tôi chưa thấy ở bất kỳ đâu. Lưu ý: Tôi đã thử tích hợp biểu mẫu tùy chỉnh từ một số tài nguyên trực tuyến nhưng không thể làm cho nó hoạt động để chọn thanh toán.Chỉ để gửi biểu mẫu thanh toán sau khi thanh toán thanh toán thành công sọc

Trong ứng dụng đường ray, tôi có bảng đơn đặt hàng và điều chính tôi đang cố thực hiện là có biểu mẫu nơi người dùng có thể gửi thông tin cá nhân của họ (không thanh toán) để đặt hàng. Sau đó, việc tích hợp thanh toán sọc sẽ cho phép họ thanh toán; tuy nhiên, một bản ghi của đơn đặt hàng sẽ không được tạo trong cơ sở dữ liệu mà không có phí sọc được ghi lại. Tôi đã không thể thực hiện điều này bằng cách sử dụng bộ điều khiển "phí" riêng biệt mà sọc gợi ý, và cũng đã thử kết hợp mã vạch vào bộ điều khiển đơn đặt hàng của tôi (xem bên dưới).

tôi nên lưu ý rằng tôi có thể nhận được nút kiểm tra để trình sọc và những chi phí được xử lý, nhưng CÓ KHÔNG có thể nhận được một kỷ lục để được tạo ra trong cơ sở dữ liệu của tôi.

Tôi đã tìm kiếm rộng và nhiều câu trả lời cho câu hỏi này (hiện đang chờ phản hồi từ hỗ trợ sọc). Bất kỳ đề xuất sẽ được nhiều đánh giá cao!

orders_controller.rb

(đây là ví dụ nơi tôi đã cố gắng kết hợp các mã vạch từ bộ điều khiển chi phí họ đề nghị vào bộ điều khiển đơn đặt hàng riêng của tôi. Tôi không chắc chắn bây giờ phải làm gì sau khi phí được xử lý để làm cho nó gửi biểu mẫu)

def create 
    @order = Order.new(order_params) 

    customer = Stripe::Customer.create(
    :email => '[email protected]', 
    :card => params[:stripeToken] 
) 

    charge = Stripe::Charge.create(
    :customer => customer.id, 
    :amount  => 5000, 
    :description => 'Rails Stripe customer', 
    :currency => 'usd' 
) 

    rescue Stripe::CardError => e 
    flash[:error] = e.message 
    render 'new' 
    end 

lệnh/new.html.erb

(Tôi để lại mã cho tất cả các trường khác trong biểu mẫu của tôi, điều này chỉ hiển thị nút gửi biểu mẫu của tôi và nút thanh toán sọc. Lý tưởng nhất là tôi có thể kết hợp các hành động vào một nút, hoặc chỉ có submit đi qua khi thanh toán xử lý thành công thông qua sọc)

<%= form_for @order do |f| %> 
    // lots of form fields 
<%= f.submit %> 

<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="500"></script> 

Trả lời

11

Thông thường bạn sẽ làm gì ...

def create 
    @order = Order.new(order_params) 
    charge_error = nil 

    if @order.valid? 
    begin 
     customer = Stripe::Customer.create(
     :email => '[email protected]', 
     :card => params[:stripeToken]) 

     charge = Stripe::Charge.create(
     :customer => customer.id, 
     :amount  => 5000, 
     :description => 'Rails Stripe customer', 
     :currency => 'usd') 

    rescue Stripe::CardError => e 
     charge_error = e.message 
    end 
    if charge_error 
     flash[:error] = charge_error 
     render :new 
    else 
     @order.save 
     redirect_to (successful page) 
    end 
    else 
    flash[:error] = 'one or more errors in your order' 
    render :new 
    end 
end 

Bằng cách này, khoản phí không được thực hiện trừ khi @order được xác thực và @order không được lưu trừ khi khoản phí thành công.

+0

Cảm ơn bạn rất nhiều. Làm việc như người ở! –

Các vấn đề liên quan