2

ruby on rails プロジェクトでpaypal-express gemを使用しています。ユーザーが Web アプリケーションでデジタル商品を購入できるようにしたいと考えています。new および create アクションを使用してコントローラーを作成しました。アクションは、newユーザーがアクセスする PayPal リンクを生成します。ユーザーは PayPal からcreate、注文を完了しようとするアクションに戻ります。

サンドボックス資格情報を使用する場合、開発ではすべて正常に動作しますが、本番資格情報を使用する場合、PayPal から「10007 - 許可が拒否されました」というエラーが表示されます。

本番用に入力したユーザー名/パスワード/API 署名を 3 回確認しましたが、それらは正しいものです (ユーザーは正しい PayPal ストアに送信されます)。

これが私のコントローラーです:

class DigitalPaymentsController < ApplicationController
  before_filter :authenticate_user!, :only => [ :new, :create ]

  def new
    Paypal.sandbox! unless Rails.env.production?

    response = paypal_request.setup(
      payment_request,
      success_url,
      cancel_url,
      :no_shipping => true
    )

    @paypal_url = response.redirect_uri
  end

  def create
    begin
      response = paypal_request.checkout!(params[:token], params[:PayerID], payment_request)

      if response.payment_info.first.payment_status == 'Completed'
        # TODO: Handle complete payments
      else
        # TODO: Handle non complete payments
      end
    rescue Paypal::Exception::APIError => e
      # Payment has failed, failure details are in e.message, also check params
    end
  end

  private

  def paypal_request
    @request ||= Paypal::Express::Request.new(
      :username   => PAYPAL_USERNAME,
      :password   => PAYPAL_PASSWORD,
      :signature  => PAYPAL_SIGNATURE
    )
  end

  def payment_request
    @payment_request ||= Paypal::Payment::Request.new(
      :currency_code => :USD,
      :amount => 15,
      :items => [{
      :name => "Awesome Product",
      :description => 'Description of awesomeness',
      :amount => 15,
      :category => :Digital
    }]
    )
  end
end

paypal-express gem をDoExpressCheckoutPayment調べると、PayPal API を呼び出して PayerID と Token を渡しているようです。PayPal API ドキュメントには、エラー (10007) を解決する方法が記載されていませんでした。

4

1 に答える 1

0

GetExpressCheckoutDetailsPayPal API エラーの理由は、トランザクションをチェックアウトする前に PayPal アクションを呼び出す必要があったためです。ここにあるペイパルエクスプレスの宝石ウィキから行を追加することでこれを行いました: https://github.com/nov/paypal-express/wiki/Instant-Payment

必要だったのはpaypal_request.details(params[:token])

于 2012-07-05T13:46:51.543 に答える