0

我正在尝试使用 paypal-express gem 来实现 paypal express 付款。但是,我很困惑。

这是事务控制器中创建方法的代码

      elsif params[:purchase][:payment_method] == "Paypal"
          #paypal payment
          request = Paypal::Express::Request.new(
              :username   => "xxxxxxxxxxxxxxxxx",
              :password   => "xxxxxxxxxxxxxxxx",
              :signature  => "xxxxxxxxxxxxxxxx"
                )
                payment_request = Paypal::Payment::Request.new(
                  :currency_code => "#{@current_user.currency}",   # if nil, PayPal use USD as default
                  :description   => "Purchase of SMS",    # item description
                  :quantity      => 1,      # item quantity
                  :amount        => "#{@total}",   # item value
                )
                response = request.setup(
                  payment_request,
                  success_url,
                cancel_url
                )
                transaction.tracking_id = response.token 
                transaction.save
                response.redirect_uri

以及成功方法

  def success   
    token = params[:token]
    payer_id = params[:payer_id]
    request = Paypal::Express::Request.new(
                  :username   => "xxxxxxxxxxxxxxx",
                  :password   => "xxxxxxxxxxxxxxx",
                  :signature  => "xxxxxxxxxxxxxxx"
                    )
    response = request.details(token)
    transaction = Transaction.find_by_tracking_id(token)
    transaction.merchant_reference = payer_id
    transaction.status = "Completed"
    transaction.save
    user = User.find(transaction.user_id)
        user.balance = (user.balance+response.amount.to_i)
        user.save()
        response = request.checkout!(
      token,
      payer_id,
      payment_request
        )
      flash[:notice] = 'Payment Transaction Completed'
      user_home_path(@current_user)   
  end

和取消方法

 def cancel   
      flash[:warn] = 'Payment Request Canceled'
      user_home_path(@current_user)     
  end

如何在 create 方法中发出正确的请求,获取令牌作为响应并将其存储,以便能够在成功方法中使用它来搜索特定事务。

DoExpressCheckoutPayment另外,我怎样才能在成功方法中执行正确的方法。

先感谢您。

4

1 回答 1

0

我从未使用过 paypal-express gem,所以我对 create 方法如何使用 response.token 有点困惑(从底部开始的第三行:transaction.tracking_id = response.token)。这项任务感觉在这个过程的早期。

无论如何,您的问题与 gem 无关,而与您的应用程序有关。您的基本问题是“如何在两个或多个操作之间保留数据?” 在我看来,您有两种可能的方法。

首先,您可以将 response.token 或 transaction.tracking_id 放入会话中。如果付款的用户不是每次访问您网站的一部分,那么这种方法可能不起作用。

其次,您可以将 token/tracking_id 存储在您用于跟踪订单的任何 DB 支持的模型上。通过这种方式,您可以根据 token/tracking_id 查找活动订单,并获取应用程序的 Paypal 响应上下文。

于 2013-10-31T18:24:00.610 回答