lib/active_merchant/billing/gateways/viaklix.rb in activemerchant-1.28.0 vs lib/active_merchant/billing/gateways/viaklix.rb in activemerchant-1.29.0

- old
+ new

@@ -4,96 +4,95 @@ class_attribute :test_url, :live_url, :delimiter, :actions self.test_url = 'https://demo.viaklix.com/process.asp' self.live_url = 'https://www.viaklix.com/process.asp' self.delimiter = "\r\n" - + self.actions = { :purchase => 'SALE', :credit => 'CREDIT' } - + APPROVED = '0' - + self.supported_cardtypes = [:visa, :master, :american_express, :discover] self.supported_countries = ['US'] self.display_name = 'ViaKLIX' self.homepage_url = 'http://viaklix.com' - + # Initialize the Gateway # # The gateway requires that a valid login and password be passed # in the +options+ hash. - # + # # ==== Options # # * <tt>:login</tt> -- Merchant ID # * <tt>:password</tt> -- PIN # * <tt>:user</tt> -- Specify a subuser of the account (optional) # * <tt>:test => +true+ or +false+</tt> -- Force test transactions def initialize(options = {}) requires!(options, :login, :password) - @options = options super end - - # Make a purchase + + # Make a purchase def purchase(money, creditcard, options = {}) form = {} add_invoice(form, options) - add_creditcard(form, creditcard) - add_address(form, options) + add_creditcard(form, creditcard) + add_address(form, options) add_customer_data(form, options) add_test_mode(form, options) commit(:purchase, money, form) end - + # Make a credit to a card (Void can only be done from the virtual terminal) # Viaklix does not support credits by reference. You must pass in the credit card def credit(money, creditcard, options = {}) if creditcard.is_a?(String) raise ArgumentError, "Reference credits are not supported. Please supply the original credit card" end - + form = {} add_invoice(form, options) - add_creditcard(form, creditcard) - add_address(form, options) + add_creditcard(form, creditcard) + add_address(form, options) add_customer_data(form, options) add_test_mode(form, options) commit(:credit, money, form) end - + private def add_test_mode(form, options) form[:test_mode] = 'TRUE' if options[:test_mode] end - + def add_customer_data(form, options) form[:email] = options[:email].to_s.slice(0, 100) unless options[:email].blank? form[:customer_code] = options[:customer].to_s.slice(0, 10) unless options[:customer].blank? end - + def add_invoice(form,options) form[:invoice_number] = (options[:order_id] || options[:invoice]).to_s.slice(0, 10) form[:description] = options[:description].to_s.slice(0, 255) end - + def add_address(form,options) - billing_address = options[:billing_address] || options[:address] - + billing_address = options[:billing_address] || options[:address] + if billing_address form[:avs_address] = billing_address[:address1].to_s.slice(0, 30) form[:address2] = billing_address[:address2].to_s.slice(0, 30) form[:avs_zip] = billing_address[:zip].to_s.slice(0, 10) form[:city] = billing_address[:city].to_s.slice(0, 30) form[:state] = billing_address[:state].to_s.slice(0, 10) form[:company] = billing_address[:company].to_s.slice(0, 50) form[:phone] = billing_address[:phone].to_s.slice(0, 20) form[:country] = billing_address[:country].to_s.slice(0, 50) end - + if shipping_address = options[:shipping_address] first_name, last_name = parse_first_and_last_name(shipping_address[:name]) form[:ship_to_first_name] = first_name.to_s.slice(0, 20) form[:ship_to_last_name] = last_name.to_s.slice(0, 30) form[:ship_to_address] = shipping_address[:address1].to_s.slice(0, 30) @@ -102,86 +101,82 @@ form[:ship_to_company] = shipping_address[:company].to_s.slice(0, 50) form[:ship_to_country] = shipping_address[:country].to_s.slice(0, 50) form[:ship_to_zip] = shipping_address[:zip].to_s.slice(0, 10) end end - + def parse_first_and_last_name(value) name = value.to_s.split(' ') - + last_name = name.pop || '' first_name = name.join(' ') - [ first_name, last_name ] + [ first_name, last_name ] end - + def add_creditcard(form, creditcard) form[:card_number] = creditcard.number form[:exp_date] = expdate(creditcard) - + if creditcard.verification_value? add_verification_value(form, creditcard) end - + form[:first_name] = creditcard.first_name.to_s.slice(0, 20) form[:last_name] = creditcard.last_name.to_s.slice(0, 30) end - + def add_verification_value(form, creditcard) - form[:cvv2cvc2] = creditcard.verification_value + form[:cvv2cvc2] = creditcard.verification_value form[:cvv2] = 'present' end - + def preamble result = { 'merchant_id' => @options[:login], 'pin' => @options[:password], 'show_form' => 'false', - 'result_format' => 'ASCII' + 'result_format' => 'ASCII' } - + result['user_id'] = @options[:user] unless @options[:user].blank? result end - - def test? - @options[:test] || super - end - + def commit(action, money, parameters) parameters[:amount] = amount(money) parameters[:transaction_type] = self.actions[action] - + response = parse( ssl_post(test? ? self.test_url : self.live_url, post_data(parameters)) ) - Response.new(response['result'] == APPROVED, message_from(response), response, - :test => @options[:test] || test?, + Response.new(response['result'] == APPROVED, message_from(response), response, + :test => @options[:test] || test?, :authorization => authorization_from(response), :avs_result => { :code => response['avs_response'] }, :cvv_result => response['cvv2_response'] ) end - + def authorization_from(response) response['txn_id'] end - + def message_from(response) response['result_message'] end - + def post_data(parameters) result = preamble - result.merge!(parameters) + result.merge!(parameters) result.collect { |key, value| "ssl_#{key}=#{CGI.escape(value.to_s)}" }.join("&") end - + def expdate(creditcard) year = sprintf("%.4i", creditcard.year) month = sprintf("%.2i", creditcard.month) "#{month}#{year[2..3]}" end - + # Parse the response message def parse(msg) resp = {} msg.split(self.delimiter).collect{|li| key, value = li.split("=") @@ -189,6 +184,6 @@ } resp end end end -end \ No newline at end of file +end