Устранение неполадок при возврате активного продавца с ошибкой 500 Internal Server Error

Следующий код

    purchase = @order.authorize_payment(@credit_card, options)
    is_success = purchase.success?
    if is_success
        ...
    else
      flash[:notice] = "!! " + purchase.message + "
" + purchase.params['missingField'].to_s redirect_to :action => :payment, :id => @order.id end

приводит к ошибке «!! Сбой с внутренней ошибкой сервера 500» в моей флэш-памяти [: уведомление]. Нет ни трассировки стека, ни ошибки веб-сервера, все, что я знаю, это то, что Purchase.message заполнен и Purchase.success? является ложным.

Я действительно в недоумении, как решить эту проблему. Я думаю, что это может быть требование ssl, но я не могу ни увидеть запрос мыла, ни проверить базовое соединение с киберисточником (мой платежный шлюз).

Я устанавливаю свой шлюз с помощью этого кода (после выполнения config.after_initialize):

ActiveMerchant::Billing::Base.mode = :production # :test
  ActiveMerchant::Billing::CreditCard.require_verification_value = false
  ActiveMerchant::Billing::CyberSourceGateway.wiredump_device = File.new(File.join([Rails.root, "log", "cybersource.log"]), "a") # doesn't work (!)
  # we need to open an external file to get the password
  mypassphrase = File.open('/var/www/foo/shared/passphrase.txt').read
  OrderTransaction.gateway = ActiveMerchant::Billing::CyberSourceGateway.new(:login    => 'vxxxxxxx',
                                                    :password => mypassphrase.to_s,
                                                    :test => false,
                                                    :vat_reg_number => 'your VAT registration number',
                                                    # sets the states/provinces where you have a physical presense for tax purposes
                                                    :nexus => "GA OH",
                                                    # don‘t want to use AVS so continue processing even if AVS would have failed
                                                    :ignore_avs => true,
                                                    # don‘t want to use CVV so continue processing even if CVV would have failed
                                                    :ignore_cvv => true,
                                                    :money_format => :dollars
                                                    )

Могу ли я увидеть запрос на мыло? Есть ли способы проверить часть этого? Любая помощь очень ценится.

Лучший,

Тим


person bonhoffer    schedule 22.07.2011    source источник
comment
Нет, здесь нет ошибки или исключения, просто свойство успеха @order.authorize_payment имеет значение false. Поэтому я хотел бы иметь трассировку стека. нет никакой ошибки с точки зрения os или ruby. Единственная обратная связь, которую я могу получить, это сообщение об ошибке во флэш-памяти, которое не очень полезно.   -  person bonhoffer    schedule 22.07.2011
comment
flash[:notice] = Purchase.errors.full_messages.join(', )   -  person Anatoly    schedule 22.07.2011
comment
это не сработало, но я решил проблему, запустив производственный режим на своем рабочем столе и отладив код.   -  person bonhoffer    schedule 23.07.2011


Ответы (2)


Итак, запоздалый ответ, но...

Я проделал большую работу со шлюзом Cybersource, и в настоящее время единственный способ увидеть запрос/ответ SOAP шлюза Cybersource — открыть гем и отредактировать его.

Если вы измените метод фиксации lib/active_merchant/billing/gateways/cybersource.rb, вы можете сделать что-то вроде этого:

def commit(request, options)
    puts "*** POSTING TO: #{test? ? TEST_URL : LIVE_URL}"
    request =  build_request(request, options)
    puts "*** POSTING:"
    puts request
    begin
         post_response = ssl_post(test? ? TEST_URL : LIVE_URL, request)
    rescue ActiveMerchant::ResponseError => e
      puts "ERROR!"
      puts e.response
    end
    puts post_response

Было бы неплохо, если бы был способ получить этот ответ без этих хлопот, я посмотрю, есть ли способ передать эту информацию через возвращенный объект ответа и добавить его в свою вилку.

person Jared    schedule 20.03.2012
comment
Вы хоть представляете, почему киберисточник отправляет ответ 500? - person Nerve; 11.07.2013

ActiveMerchant::Billing::CyberSourceGateway.logger = your_logger

person Indrit    schedule 30.03.2012