Active Merchant 和 Authorize.net 在生产中返回失败
Posted
技术标签:
【中文标题】Active Merchant 和 Authorize.net 在生产中返回失败【英文标题】:Active Merchant and Authorize.net returning failure in production 【发布时间】:2013-02-06 09:14:20 【问题描述】:我有一个包含一些基本电子商务活动的应用。我用一个测试 authorize.net 帐户试了一下,效果很好。不过,我进入了生产模式的 API,当我尝试购买任何东西时,我一直被重定向到失败屏幕。我没有收到任何错误,heroku 上的日志中没有任何内容,我什至不知道从哪里开始调试。我成功连接到 Authorize.net,交易在开发模式下成功 - 我很大程度上基于 Ryan Bate 的 RailsCast 第 145 集 (http://railscasts.com/episodes/145-integrating-active-merchant),但这里是我的代码的一些亮点(因为我正在测试 ti,我我强迫它做 1 美分的交易,不管我点了什么)
在环境/production.rb中
config.after_initialize do
ActiveMerchant::Billing::Base.mode = :production
::GATEWAY = ActiveMerchant::Billing::AuthorizeNetGateway.new(
:login => "scrubbed",
:password => "scrubbed",
:test => false
)
end
orders_controller.rb
def create
@order = Order.new(params[:order])
@order.cart = current_cart
if @order.save
if @order.purchase
@order.state = 'paid'
@order.save
render :action => "success"
end
else
render :action => "failure"
end
else
redirect_to home_page_path, notice: "The order failed to save"
end
end
def purchase
response = GATEWAY.purchase(1, credit_card, purchase_options)
transactions.create!(:action => "purchase", :amount => price_in_cents, :response => response)
#cart.update_attribute(:purchased_at, Time.now) if response.success?
response.success?
end
order.rb
def purchase
response = GATEWAY.purchase(1, credit_card, purchase_options)
transactions.create!(:action => "purchase", :amount => price_in_cents, :response => response)
#cart.update_attribute(:purchased_at, Time.now) if response.success?
response.success?
end
private
def purchase_options
:ip => ip_address,
:billing_address =>
:first_name => first_name,
:last_name => last_name,
:address1 => address_line_1,
:address2 => address_line_2,
:city => city,
:state => billing_state,
:country => "US",
:zip => zip_code,
:phone => phone_number,
:company => company
,
:shipping_address =>
:first_name => sfirst_name,
:last_name => slast_name,
:address1 => saddress_line_1,
:address2 => saddress_line_2,
:city => scity,
:state => sbilling_state,
:country => "US",
:zip => szip_code,
:phone => sphone_number,
:company => scompany
end
def validate_card
unless credit_card.valid?
credit_card.errors.full_messages.each do |message|
errors.add :base, message
end
end
end
def credit_card
@credit_card ||= ActiveMerchant::Billing::CreditCard.new(
:brand => card_type,
:number => card_number,
:verification_value => card_verification,
:month => card_expires_on.month,
:year => card_expires_on.year,
:first_name => first_name,
:last_name => last_name
)
end
【问题讨论】:
首先,您的订单控制器的最后 6 行和订单模型的前 6 行是相同的 (def purchase
) - 这是正确的吗?您在 Authorize.net 的日志中看到任何内容吗?交易失败?我的第一步是将Rails.logger.debug response.inspect
添加到我的代码中以查看响应对象。
除此之外,Heroku 不符合 PCI 标准,因此当您的商家的季度 QSA 出现时,您会遇到很多问题。如果您在不合规时标记为合规,您可能会遇到法律问题,如果您标记为不合规,他们通常会进行审核。祝你好运!
【参考方案1】:
我没有亲自处理过 authorize.net,但我使用过类似的 Web 服务,它也需要 PCI 合规性。在我的情况下,这意味着我需要一个有效的 SSL 证书才能在生产中进行交易。事实上,如果我没记错的话,交易以非常相似的方式失败,而且原因并不明显。
看起来 authorize.net 需要某种类型的安全性,具体取决于您使用的 API。 http://developer.authorize.net/integration/
【讨论】:
【参考方案2】:我需要询问一下以确保 - 您是否已为 Authorize.net 和您的银行设置您的商家帐户以用于生产用途,并且您已与他们协调以开始将资金存入您的银行帐户钱开始进来了?
如果是这样,请在此处查看他们的开发人员文档页面,了解测试和生产事务之间的区别
http://developer.authorize.net/guides/AIM/5_TestTrans.html
在网关端正确配置一切后,在测试模式下工作的事务应该在生产模式下工作。我会联系 authorize.net,可能需要最终确定您的帐户才能处理实时交易的技术或管理细节。
【讨论】:
以上是关于Active Merchant 和 Authorize.net 在生产中返回失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 Active Merchant 和 PayPal 时出现 SSL 错误
配置 active_merchant 以与 Rails 3 应用程序兼容
Rails:安装 active_merchant_payu_india 时出错
在 Active Merchant / PayPal Express Checkout 中设置税额
使用 Active Merchant 从 Authorize.net 获取 ARB 订阅信息?
Active Merchant - 未初始化的常量 ActiveSupport::XmlMini_REXML::StringIO