如何使用ruby on rails中的paypal-express gem解决10007 - “权限被拒绝”PayPal API错误

时间:2012-07-03 07:52:42

标签: ruby-on-rails ruby paypal

我在我的ruby on rails项目中使用paypal-express gem。我希望用户能够在我的网络应用程序上购买数字商品。我创建了一个带有new和create动作的控制器。 new操作会生成用户访问的PayPal链接。用户从PayPal返回到我尝试完成订单的create操作。

使用沙箱凭证时,一切正常,在使用生产凭证时,我收到PayPal的“10007 - 权限被拒绝”错误。

我已经检查了我为生产输入的用户名/密码/ API签名,并且它们是正确的(用户被发送到正确的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,它似乎在PayPal API上调用DoExpressCheckoutPayment并传递PayerID和Token。 PayPal API文档未列出解决错误的方法(10007)。

1 个答案:

答案 0 :(得分:0)

PayPal API错误的原因是我需要在签出交易之前调用PayPal GetExpressCheckoutDetails操作。我这样做是通过在这里添加来自paypal-express gem wiki的一行:https://github.com/nov/paypal-express/wiki/Instant-Payment

我需要的只是paypal_request.details(params[:token])