Rails Stripe checkout与自定义金额

问题描述 投票:0回答:1

我使用Stripe进行简单的Rails结帐。根据选中的选项/点击按钮,将向用户收取不同的金额,更改说明和列表ID,例如

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

当我将它发送到ChargesController时,我从参数中获取金额,描述和id:

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

我应该如何更改代码以使其更安全?

ruby-on-rails stripe-payments
1个回答
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

我认为当您尝试实施此公式时会产生问题,这就是为什么要做出最佳常识并创建安全付款的原因。我需要说这对你的使用不准确,因为我不知道你的项目结构这只是一个安全支付的公式。

谢谢

希望能有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.