所以我有一个我无法独自解决的问题。
我已经在我的应用程序上运行了一些测试,当它在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"
答案 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。
但相反:
登录PayPal.com 您必须拥有PayPal Business帐户才能拨打现场PayPal服务器。在以下页面上登录您的商家帐户:https://www.paypal.com。
导航至API Access页面 点击工具标签,然后转到管理您的商家&gt; API访问。
你走了,那些是好的...... 很混乱 ! 希望它有所帮助
答案 2 :(得分:0)
首先,仔细检查两组凭据是否不同。您需要一个不同于沙箱而不是生产帐户。
PAYPAL_SANDBOX_USERNAME != PAYPAL_USERNAME
PAYPAL_SANDBOX_CLI_ID != PAYPAL_CLI_ID
PAYPAL_SANDBOX_SECRET != PAYPAL_SECRET
其次,仔细检查生产凭据正确,即没有多余字符或拼写错误。