0

以下代码

    购买 = @order.authorize_payment(@credit_card,选项)
    is_success = purchase.success?
    如果是_成功
        ...
    别的
      flash[:notice] = "!! " + purchase.message + " 
" + purchase.params['missingField'].to_s redirect_to :action => :payment, :id => @order.id 结尾

在我的闪存 [:notice] 中导致“!! Failed with 500 Internal Server Error”。没有堆栈跟踪,没有网络服务器错误,我只知道 purchase.message 已填充并且 purchase.success?是假的。

我真的不知道如何解决这个问题。我认为这可能是 ssl 要求,但我既看不到肥皂请求,也看不到与网络资源(我的支付网关)的基本连接。

我用这段代码建立我的网关(在 config.after_initialize 之后):

ActiveMerchant::Billing::Base.mode = :production # :test
  ActiveMerchant::Billing::CreditCard.require_verification_value = false
  ActiveMerchant::Billing::Cyber​​SourceGateway.wiredump_device = File.new(File.join([Rails.root, "log", "cybersource.log"]), "a") # 不起作用 (!)
  # 我们需要打开一个外部文件来获取密码
  mypassphrase = File.open('/var/www/foo/shared/passphrase.txt').read
  OrderTransaction.gateway = ActiveMerchant::Billing::Cyber​​SourceGateway.new(:login => 'vxxxxxxx',
                                                    :password => mypassphrase.to_s,
                                                    :test => 假的,
                                                    :vat_reg_number => '您的增值税登记号',
                                                    # 设置您出于税收目的实际存在的州/省
                                                    :nexus => "GA OH",
                                                    # 不想使用 AVS 所以即使 AVS 失败也要继续处理
                                                    :ignore_avs => 真,
                                                    # 不想使用 CVV,所以即使 CVV 失败也要继续处理
                                                    :ignore_cvv => 真,
                                                    :money_format => :dollars
                                                    )

我可以看到肥皂请求吗?有没有办法测试其中的一部分?非常感谢任何帮助。

最好的,

蒂姆

4

2 回答 2

4

ActiveMerchant::Billing::Cyber​​SourceGateway.logger = your_logger

于 2012-03-30T15:02:03.273 回答
1

所以,迟到的回应,但......

我已经对 Cyber​​source 网关进行了大量工作,目前查看 Cyber​​source 网关的 SOAP 请求/响应的唯一方法是打开 gem 并对其进行编辑。

如果你修改 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

如果有一种方法可以在不经过麻烦的情况下获得该响应,那就太好了,我会看看是否有一种方法可以通过返回的响应对象传递该信息并将其添加到我的 fork 中。

于 2012-03-20T22:03:50.573 回答