Rails 4 - ActiveMerchant Paypal Express 结帐问题与传递项目数量

Posted

技术标签:

【中文标题】Rails 4 - ActiveMerchant Paypal Express 结帐问题与传递项目数量【英文标题】:Rails 4 - ActiveMerchant Paypal Express Checkout Issue with Passing Item Quantity 【发布时间】:2014-04-26 00:48:43 【问题描述】:

我在使用 PayPal 快速结账时遇到了一个奇怪的问题。当我传入 options[:item][:quantity] 时,我从 PayPal 收到一个错误代码,表明交易无效。

#controllers/orders_controller.rb
def express
  options = 
    :ip => request.remote_ip,
    :return_url => new_order_url,
    :cancel_return_url => products_url,
    :items => current_cart.line_items_hash
  
  response = EXPRESS_GATEWAY.setup_purchase(current_cart.build_order.price_in_cents, 
    options)
  redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token)
end

# models/cart.rb
def line_items_hash
  self.line_items.map do |line_item|
  
    :name => Product.find(line_item.product_id).name
    # :quantity => line_item.quantity,
    :description => line_item.product.description,
    :amount => line_item.gross_price_in_cents
  end
end

所以这很好用。问题是 PayPal 订单确认页面上未显示正确的数量。但是,如果我取消注释 line_items_hash 函数中的数量变量,整个事情就会中断,我会得到“来自贝宝的无效交易”。有什么想法吗?

【问题讨论】:

【参考方案1】:

愚蠢的老我。 Paypal 不断使我的交易无效,因为我传递了错误的信息。我将金额设置为 line_item total,这已经是数量 * product.price 的总数。所以 Paypal 收到的信息是数量 * (数量 * product.price)。

愚蠢的小错误,但我最终设法抓住了它。

# models/cart.rb
def line_items_hash
  self.line_items.map do |line_item|
  
    :name => Product.find(line_item.product_id).name
    :quantity => line_item.quantity,
    :description => line_item.product.description,
    :amount => line_item.price.in_cents
  end
end

【讨论】:

以上是关于Rails 4 - ActiveMerchant Paypal Express 结帐问题与传递项目数量的主要内容,如果未能解决你的问题,请参考以下文章

带有 ActiveMerchant 和 Rails 3 的信用卡表格

验证用户的 API 凭证 - Rails、ActiveMerchant 和 PayPal Express Gateway

ruby on rails 1.2.6 和 ActiveMerchant

让 ActiveMerchant PayPal Gateway 在 Rails 3 上工作的问题

rails activemerchant authorize.net 问题

Rails 3.2:activemerchant 中未定义的方法“class_inheritable_accessor”