2017-12-31 125 views
0

私はストライプを使ってRailsで簡単なチェックアウトをしています。 選択/選択されたオプションに基づいて、ユーザーには異なる金額の請求、明細書の変更、リストIDなどが請求されます。Railsカスタム金額のストライプチェックアウト

<%= link_to "Pay To Activate", 
new_charge_path(:id => listing.id, :amount => 123, :desc => "Option A"), 
class: "btn btn-primary btn-sm", :method=> :get %> 

私はパラメータの量、説明とIDを取得していますChargesControllerにこれを送る:

http://localhost:3000/charges/new?amount=123&desc=Option+A&id=45 

明らかにこれは、ユーザーがURLで金額を変更することができますので、安全ではないです。

アクションを作成するには、以下のようになります。

def create 
    customer = Stripe::Customer.create(
    :email => params[:stripeEmail], 
    :source => params[:stripeToken] 
) 

    charge = Stripe::Charge.create(
    :customer => customer.id, 
    :amount  => @amount, 
    :description => @description, 
    :currency => 'eur' 
) 

    redirect_to thankyou_path 

    rescue Stripe::CardError => e 
    flash[:error] = e.message 
    redirect_to new_charge_path 
end 

私はそれをより安全にするために自分のコードを変更する必要がありますどのように?

+0

を支援するために、私は問題の一部は、ビューの代わりに、コントローラに量を設定していることかもしれないと思います。 [Stripe docs](https://stripe.com/docs/checkout/rails)は、作成アクションに保存されている金額を表示します。 –

答えて

0

エキスパートのコメントに基づいて支払処理機能をモデル化する必要があります。私は道によって、実際のお支払いに使用してどのようなモデルを知らないpaymentモデルに

、その

ようなもの
#=> model.rb 

def process_payment 
    customer = Stripe::Customer.create email: email, card: token 
    Stripe::Charge.create customer: customer.id, amount: 1000, description: 'Premium', currency: 'usd' #=> 1000 means 10 USD 
end 

コントローラ

@payment = Payment.new({ email: params[:stripeEmail], 
         token: params[:stripeToken] 
        }) 

begin 
    @payment.process_payment 
    @payment.save 
    redirect_to thankyou_path 
rescue Exception => e 
    flash[:error] = e.message 
    @payment.destroy 
    redirect_to new_charge_path 
end 

私はときに、問題を作成することだと思います最高の常識を作り、安全な支払いを作成する理由は、この数式を実装しようとします。私はあなたのプロジェクト構造を知らないので、これは安全な支払いのための公式に過ぎないので、これはあなたの使用には正確ではないと言いたいと思います。

おかげ

希望

関連する問題