Paypal-express gem,在dev中工作但不在prod中工作

时间:2015-05-24 01:08:37

标签: ruby-on-rails ruby rubygems paypal-sandbox paypal

所以我有一个我无法独自解决的问题。

我已经在我的应用程序上运行了一些测试,当它在dev中启动时它工作正常但是只要它在Prod上,所以它使用真正的识别器,它不再起作用了。

我收到了这个错误:

Paypal::Exception::APIError (PayPal API Error: 'Security error')/offers_controller.rb:218:in choose_step'

  if Rails.env.production?
    response = request.setup(
        payment_request,
        "http://www.workiz.com/recruteurs/paypal_callback/" + params[:app_id],
        "http://www.workiz.com/recruteurs/offres",
        paypal_options  # Optional
    )
  else # Development ou Test
    response = request.setup(
        payment_request,
        "http://localhost:3000/recruteurs/paypal_callback/" + params[:app_id],
        "http://localhost:3000/recruteurs/offres",
        paypal_options  # Optional
    )
  end

这就是崩溃的行,所以当我调用request.setup

请求的创建方式如下:

  if Rails.env.development?
    Paypal.sandbox!
    Paypal::Express::Request.new(
        username: ENV['PAYPAL_SANDBOX_USERNAME'],
        password: ENV['PAYPAL_SANDBOX_CLI_ID'],
        signature: ENV['PAYPAL_SANDBOX_SECRET']
    )
  elsif Rails.env.production?

    Rails.logger.info "Paypal SETUP PRODUCTION"

    Paypal::Express::Request.new(
        username: ENV['PAYPAL_USERNAME'],
        password: ENV['PAYPAL_CLI_ID'],
        signature: ENV['PAYPAL_SECRET']
    )
  end

是的,记录器“Paypal SETUP PRODUCTION”出现,值集是ENV变量中的好值。

我不得不把Paypal.sandbox!在config / development.rb中使它适用于沙箱,但我找不到让它适用于生产的方法......

欢迎任何帮助。非常感谢你。

我显示错误,看起来像是这样:

ERROR IS: #<Paypal::Exception::APIError::Response:0x007fa61661e040 
@raw={
:TIMESTAMP=>"2015-05-24T15:01:30Z", 
:CORRELATIONID=>"f3067f049ad", 
:ACK=>"Failure", 
:VERSION=>"88.0", 
:BUILD=>"1675131", 
:L_ERRORCODE0=>"10002", 
:L_SHORTMESSAGE0=>"Security error", 
:L_LONGMESSAGE0=>"Security header is not valid", 
:L_SEVERITYCODE0=>"Error"},

@ack="Failure", @build="16751317", @correlation_id="f3067f049a", @timestamp="2015-05-24T15:01:30Z", @version="88.0", @order_time=nil, @pending_reason=nil, @payment_status=nil, @payment_type=nil, @reason_code=nil, @transaction_type=nil, 
@error_code="10002", 
@severity_code="Error", 
@long_message="Security header is not valid", 
@short_message="Security error"

3 个答案:

答案 0 :(得分:1)

详细了解您获得的例外情况。

根据https://github.com/nov/paypal-express/blob/master/lib/paypal/exception/api_error.rb,错误应该包含来自API响应的更多有用信息。

只需抓住异常,并打印出来的内容:

begin
  response = request.setup...
rescue Paypal::Exception::APIError => error
  puts error.inspect
  raise error
end

您可能错过了PayPal帐户中的某些配置。详细的错误消息和错误代码应指向正确的方向。

答案 1 :(得分:0)

好的,我终于找到了我的错误。

看来,您不应该在应用程序的“实时页面”中使用CLI ID,PWD和SIGNATURE。

但相反:

  1. 登录PayPal.com 您必须拥有PayPal Business帐户才能拨打现场PayPal服务器。在以下页面上登录您的商家帐户:https://www.paypal.com

  2. 导航至API Access页面 点击工具标签,然后转到管理您的商家&gt; API访问。

  3. 你走了,那些是好的...... 很混乱 ! 希望它有所帮助

答案 2 :(得分:0)

首先,仔细检查两组凭据是否不同。您需要一个不同于沙箱而不是生产帐户。

PAYPAL_SANDBOX_USERNAME != PAYPAL_USERNAME
PAYPAL_SANDBOX_CLI_ID != PAYPAL_CLI_ID
PAYPAL_SANDBOX_SECRET != PAYPAL_SECRET

其次,仔细检查生产凭据正确,即没有多余字符或拼写错误。