支付成功后渲染视图

Posted

技术标签:

【中文标题】支付成功后渲染视图【英文标题】:Render view if payment successful 【发布时间】:2013-05-18 10:52:06 【问题描述】:

关于处理付款的快速问题。我想在 Rails 应用程序中成功付款时重定向到特定视图(或显示链接),你们将如何处理这样的操作?

另外请告诉我避免安全漏洞的最佳方法,以及您将使用哪种支付解决方案以及原因。

【问题讨论】:

在什么上使用redirect_to?这就是我要问的。为了使用redirect_to,我如何将成功付款的信息返回到我的应用程序。 【参考方案1】:

如果您的应用正在尝试处理某种支付方式,那么目前最好的方式是 Active Merchant,许多人都会同意这一点。我没有亲自使用过它,但如果您从他们的网站上阅读:Active Merchant 我确信它会解释核心优势。我还可以支持 Active Merchant 是最好的解决方案这一事实,因为 ruby​​-toolbox 还突出显示了以下内容:Ruby Toolbox - Payments 这是最常用的。但是,有多种解决方案可以满足您的需求,这取决于您到底想要它做什么以及想要它处理什么。此外,关于重定向到成功付款的特定视图,您将在您的 OrderControllerPaymentsController 中有一个 create 操作,它会执行以下操作:

 def create
    @order = Order.new(params[:order]) #Create new order based on the 'new' action and pass in order object.
    @order.add_line_items_from_cart(current_cart) #Add the line_items from the cart to the @order.

    respond_to do |format|
      if @order.save #Begin to save order
        OrderMailerProcess.order_process(@order).deliver

        #OrderMailerProcess is called and passes in the order
        #and uses the .deliver function that sends the user the email.
        #The OrderMailerProcess is a mailer set in mailers directory. order_process
        #is the function that handles the mailer.

        Cart.destroy(session[:cart_id]) #If the order is saved destroy the current session of the cart.
        session[:cart_id] = nil #Cart_id now becomes nil

        format.html  redirect_to(root_url, :notice => #Format into ht
            'Thank you for your order you will recieve an email shortly.') 
      else
        format.html  render :action => "new" 
      end
    end
  end

从上面提供的示例中,此创建操作是您可能如何创建订单的 sn-p,并且在保存订单后,会触发邮件发送给该用户,详细说明他们订购的内容。但与您最相关的是format.html 块内的redirect_to(root_url, :notice....) 这意味着在创建订单后,用户将被重定向到您的应用程序的根目录,在大多数电子商务系统中该根目录为home#index。应该把事情弄清楚

【讨论】:

非常感谢,我会阅读活跃商家的信息。听起来正是我需要的。 如果这回答了您的问题,请不要忘记将其标记为完成 :)

以上是关于支付成功后渲染视图的主要内容,如果未能解决你的问题,请参考以下文章

Django:渲染视图后如何更新模型?

在 BackBone js 中渲染视图时调用 javascript。渲染后回调?

渲染后如何将一些内容放到视图中?

CALayer 在视图可见后添加时不渲染

向客户视图显示交易 ID

关闭多个推送的视图控制器