0

paypal-express gem を使用して、paypal Express の支払いを実装しようとしています。しかし、混乱しています。

トランザクション コントローラの create メソッドのコードは次のとおりです。

      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 メソッドで適切なリクエストを作成し、レスポンスとしてトークンを取得して保存し、success メソッドでそれを使用して特定のトランザクションを検索するにはどうすればよいですか。

DoExpressCheckoutPaymentまた、成功メソッドで適切に実行するにはどうすればよいですか。

前もって感謝します。

4

1 に答える 1

0

私は、paypal-express gem を使用したことがないので、create メソッドが response.token をどのように利用できるかについて少し混乱しています (下から 3 行目: transaction.tracking_id = response.token)。その割り当ては、プロセスの早い段階で感じられます。

とにかく、あなたの質問は宝石とはほとんど関係がなく、アプリケーションと関係があります. あなたの根底にある質問は、「2 つ以上のアクション間でデータを保持するにはどうすればよいですか?」です。私が見ているように、あなたには2つの可能なアプローチがあります。

まず、response.token または transaction.tracking_id をセッションに入れることができます。支払いを行うユーザーが Web サイトへのすべての訪問の一部ではない場合、このアプローチは機能しない可能性があります。

次に、注文を追跡するために使用している DB ベースのモデルに token/tracking_id を保存できます。このようにして、token/tracking_id に基づいてアクティブな注文を検索し、Paypal の応答に対するアプリケーションのコンテキストを取得できます。

于 2013-10-31T18:24:00.610 に答える