如何从模型到控制器的网关响应 - Ruby on Rails

时间:2011-06-24 01:02:11

标签: ruby-on-rails ruby-on-rails-3 activemerchant

我的应用程序使用activemerchant处理付款。我正在使用Eway作为我的支付网关。我正在使用Eway存储信用卡详细信息,以防止它们离开我的应用程序数据库。

我正在使用一个方法商店,该商店会返回一个带有客户结算ID的回复,以后我可以用它来处理订单。

http://rdoc.info/github/Shopify/active_merchant/master/ActiveMerchant/Billing/EwayManagedGateway

我的主要问题是如何将响应值输入控制器,以便将其保存到成员模型中。

我已经创建了一个简单的ruby文件来测试这一切,但确实如此。我只需要将此代码转换为我的rails应用程序。

require "rubygems"
gem 'activemerchant', '1.15.0'
require 'activemerchant'

ActiveMerchant::Billing::Base.mode = :production

gateway = ActiveMerchant::Billing::EwayManagedGateway.new(
  :login => '12345678',
  :username => 'mylogin@example.com',
  :password => 'mypassword'
) 

credit_card = ActiveMerchant::Billing::CreditCard.new(
    :type               =>  "visa",
    :number             =>  "4444333322221111",
    :verification_value =>  "123",
    :month              =>  "11",
    :year               =>  "2011",
    :first_name         =>  "John",
    :last_name          =>  "Citizen"
)

options = {
    :order_id => '1230123',
    :ip => "127.0.0.1",
    :email => 'john.citizen@example.com',
    :billing_address => { :title => "Mr.",
                      :address1 => '123 Sample Street',
                      :city => 'Sampleville',
                      :state => 'NSW',
                      :country => 'AU',
                      :zip => '2000'
                      },
    :description => 'purchased items'
}



if credit_card.valid?
  response = gateway.store(credit_card, options)
  if response.success?
    puts "Credit Card Stored. #{response.message}"
    customer = response.params['CreateCustomerResult']
    puts "Customer Id: #{customer}"
  else
    puts "Error: #{response.message}"
  end
else
  puts "Error, credit card is not valid. #{credit_card.errors.full_messages.join('. ')}"
end

以下是订单模型中的相关代码。

  serialize       :params
  cattr_accessor  :gateway

  def response=(response)
    self.success        = response.success?
    self.message        = response.message
    self.params         = response.params
    self.billing_id     = response.params['CreateCustomerResult']
  rescue ActiveMerchant::ActiveMerchantError => e
    self.success        = false
    self.message        = e.message
    self.params         = {}
    self.billing_id     = nil
 end

 def store
   response = Order.gateway.store(credit_card, options)
 end

这是我的订单控制器创建代码。

  def create
    @member  = current_member
    @order_deal = Deal.find(params[:deal_id])
    @order = @order_deal.orders.build(params[:order])
    @order.member_id = current_member.id
    @order.ip_address = request.remote_ip
    @deal = @order_deal
    if @order.save
      if @order.store
        render :action => "success"
        flash[:notice] = "Successfully processed your order."
      else 
        render :action => "new"
      end
    else
      render :action  => 'new'
    end
  end

所以基本上我想得到

response.params['CreateCustomerResult'] 

并将其添加到

下的成员模型中
member.billing_id = response.params['CreateCustomerResult]

我该怎么做?

0 个答案:

没有答案