所以我有一个电子商务类型的rails应用程序,用户可以在其中列出要预订的空间,其他用户可以在指定的时间内预订这些空间。
我使用了这个教程,http://www.gotealeaf.com/blog/basic-paypal-checkout-processing-in-rails,来设置我的系统。
一旦用户提交了创建新预订的表格,他们就会被重定向到PayPal网站,在那里他们登录PayPal,确认他们正在付款,一旦他们付款,他们就可以选择返回我的网站并查看他们的预订发票。
我的问题是,当用户在他们的新预订表上点击提交并被带到贝宝网站时,他们可能会在浏览器上按下,将他们带回我的网站,但他们的预订现在会被记录下来。
除非通过贝宝支付,否则我如何阻止预订被记录?
以下是我的预订控制器的创建操作:
def create
@booking = Booking.new(params[:booking].permit(booking_params)
@booking.space = @space
Space.find(@space.id).update_attributes( :balance => @space.balance + (@booking.length * @space.hourly_rate))
if @booking.save
redirect_to @booking.paypal_url(space_booking_path(@space, @booking))
else
render 'new'
end
end
还有我的应用程序/模型/booking.rb:
class Booking < ActiveRecord::Base
include Bookable
def paypal_url(return_path)
values = {
business: "nikia.i-facilitator@peerparking.ca",
cmd: "_xclick",
upload: 1,
return: "#{Rails.application.secrets.app_host}#{return_path}",
invoice: id * rand(19284),
amount: space.hourly_rate * length,
item_name: space.address,
item_number: space.id,
quantity: '1',
notify_url: "#{Rails.application.secrets.app_host}/hook"
}
"#{Rails.application.secrets.paypal_host}/cgi-bin/webscr?" + values.to_query
end
end
以及我的路线中的相关路线。rb
post "spaces/:space_id/bookings/:id" => "bookings#show"
浏览器返回箭头应返回到用户已访问的网站URL。此URL不应视为付款已完成(并按顺序预订(。在重定向到PayPal之前,在您的页面上重新加载浏览器是否也允许用户完成预订?
假设你使用的是网站支付Stnadard,你通常只会在用户到达你提供给PayPal的return_url,然后你的代码成功处理PayPal将在回复你的帖子中包含的结果变量时处理预订。(或者,对于那些付款但没有直接返回您的网站的客户,您可以使用IPN将付款与客户的账户关联,以便异步完成他们的订单。(