对返回“失败并出现 500 内部服务器错误”的活动商家进行故障排除
Posted
技术标签:
【中文标题】对返回“失败并出现 500 内部服务器错误”的活动商家进行故障排除【英文标题】:Troubleshooting Active Merchant returning "Failed with 500 Internal Server Error" 【发布时间】:2011-10-10 17:32:13 【问题描述】:以下代码
购买 = @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 结尾在我的 flash[: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::CyberSourceGateway.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::CyberSourceGateway.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 )我可以查看肥皂请求吗?有没有办法测试其中的一部分?非常感谢任何帮助。
最好的,
提姆
【问题讨论】:
不,没有错误或异常,只是@order.authorize_payment的成功属性为false。所以我很想拥有堆栈跟踪。从操作系统或红宝石的角度来看没有错误。我能得到的唯一反馈是闪存中的错误消息,这不是很有帮助。 flash[:notice] = purchase.errors.full_messages.join(', ) 这不起作用,但我通过在桌面上运行生产模式并调试代码解决了问题。 【参考方案1】:ActiveMerchant::Billing::CyberSourceGateway.logger = your_logger
【讨论】:
【参考方案2】:所以,回复晚了,但是...
我已经对 Cybersource 网关进行了大量工作,目前查看 Cybersource 网关的 SOAP 请求/响应的唯一方法是打开 gem 并对其进行编辑。
如果你修改了lib/active_merchant/billing/gateways/cybersource.rb的commit方法,你可以这样做:
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 中。
【讨论】:
您知道网络来源为什么会发送 500 响应吗?以上是关于对返回“失败并出现 500 内部服务器错误”的活动商家进行故障排除的主要内容,如果未能解决你的问题,请参考以下文章
Tableau Server 企业日常问题 26TSM 命令失败,并出现“500 - 内部服务器”错误
Tableau Server 企业日常问题 26TSM 命令失败,并出现“500 - 内部服务器”错误