8

Bối cảnh:Kiểm tra cho một khoản phí thành công sử dụng sọc cho đường ray

Tôi đang sử dụng sọc thanh toán chấp nhận thanh toán một lần ở đường ray. Tôi có bộ điều khiển phí như hình dưới đây. Ban đầu tôi đã sử dụng webhook sọc để nghe charge.succeeded, nhưng gặp phải một số vấn đề do tính chất không đồng bộ của webhook. Tôi đã chuyển logic nghiệp vụ sang bộ điều khiển. Nếu phí của khách hàng là thành công, sau đó tôi lưu khách hàng và một số chi tiết khác vào db.

Câu hỏi của tôi:

là việc kiểm tra này đủ để đảm bảo rằng một lần sạc là thành công?

if charge["paid"] == true 

Các tài liệu Stripe cho Stripe :: Charge.create tiểu bang, " Trả về một đối tượng chịu trách nhiệm nếu phí thành công. Tăng lỗi nếu họ gặp khó khăn. Một nguồn tin chung của lỗi là thẻ không hợp lệ hoặc đã hết hạn, hoặc một thẻ hợp lệ với số dư không đủ khả dụng. "

My ChargesController:

class ChargesController < ApplicationController 

    def new 

    end 

    def create 
    # Amount in cents 

    @amount = 100 
    temp_job_id = cookies[:temp_job_id] 
    customer_email = TempJobPost.find_by(id: temp_job_id).company[:email] 
    customer = Stripe::Customer.create(
     :email => customer_email, 
     :card => params[:stripeToken] 
    ) 

    charge = Stripe::Charge.create(
     :customer => customer.id, 
     :amount  => @amount, 
     :description => 'Rails Stripe customer', 
     :currency => 'usd', 
     :metadata => {"job_id"=> temp_job_id} 
    ) 
    # TODO: charge.paid or charge["paid"] 
    if charge["paid"] == true 
    #Save customer to the db 
    end 

    # need to test this and refactor this using begin-->rescue--->end 
    rescue Stripe::CardError => e 
     flash[:error] = e.message 
     redirect_to charges_path 

    end 
end 

Trả lời

11

Vâng, đó là tất cả những gì bạn cần làm. Nếu khoản phí thành công, Stripe sẽ trả về một đối tượng Charge và bạn có thể kiểm tra tham số paid của nó. Nếu khoản phí không thành công, chúng tôi sẽ ném một ngoại lệ.

Chúc mừng, Larry

PS tôi làm việc trên Hỗ trợ tại sọc.

+1

Vì vậy, về mặt kỹ thuật, anh ấy không cần phải làm gì nếu tính phí ["trả tiền"] 'đúng? Bởi vì nếu phí không thành công, ngoại lệ sẽ được nâng lên và phần của mã sẽ không được thực thi? – okysabeni

+0

không cần sử dụng webhook? –

+0

Chúng ta có thể dựa vào trạng thái = "đã thành công" không? –

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