Rails 4 - 即使用户退出PayPal付款,用户也可以预订空间

时间:2015-07-05 23:58:44

标签: ruby-on-rails ruby-on-rails-4 paypal paypal-sandbox

所以我有一个电子商务类型的rails应用程序,用户可以列出要预订的空间,其他用户可以在指定的时间内预订这些空间。

我使用本教程http://www.gotealeaf.com/blog/basic-paypal-checkout-processing-in-rails来设置我的系统。

一旦用户提交表单以创建新预订,他们将被重定向到PayPal网站,在那里他们登录到PayPal,确认他们正在付款,一旦他们付款,他们可以选择返回我的网站并查看他们的预订发票。

我的问题是,当用户点击他们的新预订表单上的提交并将他们带到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     

还有我的app / models / 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

我的routes.rb中的相关路线

post "spaces/:space_id/bookings/:id" => "bookings#show"

1 个答案:

答案 0 :(得分:0)

浏览器后退箭头应返回您网站上用户所在的网址。此网址不应考虑付款完成(并按顺序预订)。是否会在重定向到PayPal之前的页面上重新加载浏览器还允许用户完成预订?

假设您使用的是网站付款标准,您通常只会在用户到达您向PayPal提供的return_url时处理预订,然后您的代码会成功处理PayPal将在帖子中包含的结果变量返回给您。 (或者对于付费但未直接返回您网站的客户,您可以使用IPN将付款与客户的帐户相关联,以便可以异步完成订单。)