我使用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
我应该如何更改代码以使其更安全?
基于专家评论支付流程功能必须建模。
在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
我认为当您尝试实施此公式时会产生问题,这就是为什么要做出最佳常识并创建安全付款的原因。我需要说这对你的使用不准确,因为我不知道你的项目结构这只是一个安全支付的公式。
谢谢
希望能有所帮助