Paypal-экспресс гем, работающий в dev, но не в prod
Так что у меня есть проблема, которую я не могу решить в одиночку.
Я запустил некоторый тест для моего приложения, и когда он запускается в 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 ответа
Подробно рассмотрите исключение, которое вы получаете.
Согласно 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. Подробное сообщение об ошибке и код ошибки должны указывать вам правильное направление.
Во-первых, дважды проверьте, что 2 набора учетных данных различны. Вам нужна другая учетная запись для песочницы, чем производство.
PAYPAL_SANDBOX_USERNAME != PAYPAL_USERNAME
PAYPAL_SANDBOX_CLI_ID != PAYPAL_CLI_ID
PAYPAL_SANDBOX_SECRET != PAYPAL_SECRET
Во-вторых, дважды проверьте правильность производственных учетных данных, то есть никаких лишних символов или опечаток.
Хорошо, я наконец нашел свою ошибку.
Похоже, вы не должны использовать CLI ID, PWD и SIGNATURE с "живой страницы" в вашем приложении.
Но вместо этого:
Войдите в PayPal.com. Вы должны иметь учетную запись PayPal Business, чтобы совершать звонки на действующие серверы PayPal. Войдите в свою учетную запись Business на следующей странице: https://www.paypal.com/.
Перейдите на страницу доступа к API. Откройте вкладку "Инструменты" и выберите "Управление бизнесом"> "Доступ к API".
Вот, пожалуйста, это хороший... Очень запутанно! Надеюсь, поможет