我一直在尝试使用我的rails应用程序设置wepay-rails gem https://github.com/adamthedeveloper/wepay-rails,并且已经成功地这样做但是我已经意识到,由于我的设置,用户可以继续他们的订单的一部分,然后打开一个新的选项卡,创建一个新的订单,然后返回到第一个选项卡,允许他们完成他们在第一个项目上的结帐,但将第二个项目标记为已付款。
我已遵循自述文件中的指南,以实现我当前的设置:
class Purchase::CheckoutController < ApplicationController
include WepayRails::Payments
def index
begin
@order = Order.find(session[:order_id])
rescue
redirect_to :root
flash[:warning] = "You do not currently have any pending orders."
return
end
@item = Item.find(@order.item_id)
checkout_params = {
:amount => @order.total.to_f,
:short_description => "Order",
:long_description => "Your order for #{@order.quantity} #{@item.name.pluralize(@order.quantity)} ",
}
init_checkout_and_send_user_to_wepay(checkout_params)
end
end
用户在返回时重定向到的控制器:
class Purchase::FinalizeController < ApplicationController
def index
# Fetch the WepayCheckoutRecord that was stored for the checkout
wcr = WepayCheckoutRecord.find_by_checkout_id(params[:checkout_id])
@order = Order.find(session[:order_id])
@order.wepay_checkout_record = wcr
@order.paid = true if wcr.state == 'authorized'
@order.save
redirect_to :root, :notice => "You have completed your purchase."
end
end
安全问题本身非常明显,如果您在订单中间更改会话ID,那么在返回时错误的订单会被批准。问题是init_checkout_and_send_user_to_wepay没有返回任何值,我可以使用它来立即将订单和结账记录捆绑在一起。我使用这个插件是错误的,还是只是遗漏了一些明显的东西?
谢谢大家的帮助!