开发者

How to get gateway response from model into controller - Ruby on Rails

My application uses activemerchant to process payments. I'm using Eway as my payment gateway. I'm storing credit card details with Eway to keep them out of my application database.

I'm using a method store which returns a response with a customer billing id that I can use at a later time to process the order.

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

My main issue is how do I get the response value into my controller so I can save it to the member model.

I've created a simple ruby file to test this all works and it does. I just need to convert this code to work inside my rails app.

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

Here is the relevant code in my order model.

  serialize       :params
  cattr_accessor  :gateway

  def response=(response)
    self.success        = response.success?
    self.message        = response.message
    self.params         = response.params
    self.billin开发者_C百科g_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

Here is my order controller create code.

  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

So essentially I want to get the

response.params['CreateCustomerResult'] 

and add it to my member model under

member.billing_id = response.params['CreateCustomerResult]

How can I do this?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜