我有activemerchant 1.16.0和rails 3.0.5.
我正在尝试构建一个基本代码,以使用活动商家与PayPal的网关进行通信.
if credit_card.valid?
# or gateway.purchase to do both authorize and capture
response = gateway.authorize(1000, credit_card, :ip => "127.0.0.1")
if response.success?
gateway.capture(1000, response.authorization)
puts "Purchase complete!"
else
puts "Error: #{response.message}"
end
else
puts "Error: credit card is not valid. #{credit_card.errors.full_messages.join('. ')}"
end
我收到以下错误:
/Library/Ruby/Gems/1.8/gems/activesupport-3.0.9/lib/active_support/xml_mini/rexml.rb:20:in `parse': uninitialized constant ActiveSupport::XmlMini_REXML::StringIO (NameError)
此错误从gateway.authorize()调用传播.
知道我的设置有什么问题吗?
谢谢.
最佳答案 根据这个问题,它在代码本身时不起作用,但在需要添加“stringio”时起作用.
我怀疑ActiveMerchant是经过单元测试的,但由于某种原因,这些单元测试没有检测到对StringIO的依赖,可能是因为单元测试代码的其他部分间接需要stringio.
我最近发现的一件事是需要’yaml’给你stringio库作为副作用:
StringIO.new
# NameError: uninitialized constant StringIO
# from (irb):1
require "yaml"
# => true
StringIO.new
# => #<StringIO:0x7fb7d48ce360>
RUBY_VERSION
# => "1.8.7"
并且不难想象ActiveMerchant(或Rails的其他部分)的单元测试需要yaml.
但是,这只是猜测.我没有检查,因为我不使用Rails.