lib/active_merchant/billing/gateways/transnational.rb in activemerchant-1.42.9 vs lib/active_merchant/billing/gateways/transnational.rb in activemerchant-1.43.0
- old
+ new
@@ -1,239 +1,9 @@
module ActiveMerchant #:nodoc:
module Billing #:nodoc:
- class TransnationalGateway < Gateway
- self.live_url = self.test_url = 'https://secure.networkmerchants.com/api/transact.php'
-
- self.supported_countries = ['US']
- self.supported_cardtypes = [:visa, :master, :american_express, :discover]
-
+ class TransnationalGateway < NetworkMerchantsGateway
self.homepage_url = 'http://www.tnbci.com/'
self.display_name = 'Transnational'
-
- self.money_format = :dollars
- self.default_currency = 'USD'
-
- def initialize(options = {})
- requires!(options, :login, :password)
- super
- end
-
- def authorize(money, creditcard_or_vault_id, options = {})
- post = build_auth_post(money, creditcard_or_vault_id, options)
- commit('auth', post)
- end
-
- def purchase(money, creditcard_or_vault_id, options = {})
- post = build_purchase_post(money, creditcard_or_vault_id, options)
- commit('sale', post)
- end
-
- def capture(money, authorization, options = {})
- post = build_capture_post(money, authorization, options)
- commit('capture', post)
- end
-
- def void(authorization, options = {})
- post = build_void_post(authorization, options)
- commit('void', post)
- end
-
- def refund(money, authorization, options = {})
- post = build_refund_post(money, authorization, options)
- commit('refund', post)
- end
-
- def store(creditcard, options = {})
- post = build_store_post(creditcard, options)
- commit_vault('add_customer', post)
- end
-
- def unstore(customer_vault_id, options = {})
- post = build_unstore_post(customer_vault_id, options)
- commit_vault('delete_customer', post)
- end
-
- private
-
- def build_auth_post(money, creditcard_or_vault_id, options)
- post = {}
- add_order(post, options)
- add_address(post, options)
- add_shipping_address(post, options)
- add_payment_method(post, creditcard_or_vault_id, options)
- add_amount(post, money)
- post
- end
-
- def build_purchase_post(money, creditcard, options)
- build_auth_post(money, creditcard, options)
- end
-
- def build_capture_post(money, authorization, option)
- post = {}
- post[:transactionid] = authorization
- add_amount(post, money)
- post
- end
-
- def build_void_post(authorization, options)
- post = {}
- post[:transactionid] = authorization
- post
- end
-
- def build_refund_post(money, authorization, options)
- post = {}
- post[:transactionid] = authorization
- add_amount(post, money)
- post
- end
-
- def build_store_post(creditcard_or_check, options)
- post = {}
- add_address(post, options)
- add_shipping_address(post, options)
- add_payment_method(post, creditcard_or_check, options)
- post
- end
-
- def build_unstore_post(customer_vault_id, options)
- post = {}
- post['customer_vault_id'] = customer_vault_id
- post
- end
-
- def add_order(post, options)
- post[:orderid] = options[:order_id]
- post[:orderdescription] = options[:description]
- end
-
- def add_address(post, options)
- post[:email] = options[:email]
- post[:ipaddress] = options[:ip]
-
- address = options[:billing_address] || options[:address] || {}
- post[:address1] = address[:address1]
- post[:address2] = address[:address2]
- post[:city] = address[:city]
- post[:state] = address[:state]
- post[:zip] = address[:zip]
- post[:country] = address[:country]
- post[:phone] = address[:phone]
- end
-
- def add_shipping_address(post, options)
- shipping_address = options[:shipping_address] || {}
- post[:shipping_address1] = shipping_address[:address1]
- post[:shipping_address2] = shipping_address[:address2]
- post[:shipping_city] = shipping_address[:city]
- post[:shipping_state] = shipping_address[:state]
- post[:shipping_zip] = shipping_address[:zip]
- post[:shipping_country] = shipping_address[:country]
- end
-
- def add_swipe_data(post, options)
- # unencrypted tracks
- post[:track_1] = options[:track_1]
- post[:track_2] = options[:track_2]
- post[:track_3] = options[:track_3]
-
- # encrypted tracks
- post[:magnesafe_track_1] = options[:magnesafe_track_1]
- post[:magnesafe_track_2] = options[:magnesafe_track_2]
- post[:magnesafe_track_3] = options[:magnesafe_track_3]
- post[:magnesafe_magneprint] = options[:magnesafe_magneprint]
- post[:magnesafe_ksn] = options[:magnesafe_ksn]
- post[:magnesafe_magneprint_status] = options[:magnesafe_magneprint_status]
- end
-
- def add_payment_method(post, creditcard_or_check_or_vault_id, options)
- post[:processor_id] = options[:processor_id]
- post[:customer_vault] = 'add_customer' if options[:store]
-
- add_swipe_data(post, options)
-
- # creditcard_or_check can be blank if using swipe data
- if creditcard_or_check_or_vault_id.is_a?(CreditCard) # creditcard or check
- creditcard = creditcard_or_check_or_vault_id
- post[:firstname] = creditcard.first_name
- post[:lastname] = creditcard.last_name
- post[:ccnumber] = creditcard.number
- post[:ccexp] = format(creditcard.month, :two_digits) + format(creditcard.year, :two_digits)
- post[:cvv] = creditcard.verification_value
- post[:payment] = 'creditcard'
- elsif creditcard_or_check_or_vault_id.is_a?(Check)
- check = creditcard_or_check_or_vault_id
- post[:firstname] = check.first_name
- post[:lastname] = check.last_name
- post[:checkname] = check.name
- post[:checkaba] = check.routing_number
- post[:checkaccount] = check.account_number
- post[:account_type] = check.account_type
- post[:account_holder_type] = check.account_holder_type
- post[:payment] = 'check'
- else
- post[:customer_vault_id] = creditcard_or_check_or_vault_id
- end
- end
-
- def add_login(post)
- post[:username] = @options[:login]
- post[:password] = @options[:password]
- end
-
- def add_amount(post, money)
- post[:currency] = options[:currency] || currency(money)
- post[:amount] = amount(money)
- end
-
- def commit_vault(action, parameters)
- commit(nil, parameters.merge(:customer_vault => action))
- end
-
- def commit(action, parameters)
- raw = parse(ssl_post(self.live_url, build_request(action, parameters)))
-
- success = (raw['response'] == ResponseCodes::APPROVED)
-
- authorization = authorization_from(success, parameters, raw)
-
- Response.new(success, raw['responsetext'], raw,
- :test => test?,
- :authorization => authorization,
- :avs_result => { :code => raw['avsresponse']},
- :cvv_result => raw['cvvresponse']
- )
- end
-
- def build_request(action, parameters)
- parameters[:type] = action if action
- add_login(parameters)
- parameters.to_query
- end
-
- def authorization_from(success, parameters, response)
- return nil unless success
-
- authorization = response['transactionid']
- if(parameters[:customer_vault] && (authorization.nil? || authorization.empty?))
- authorization = response['customer_vault_id']
- end
-
- authorization
- end
-
- class ResponseCodes
- APPROVED = '1'
- DENIED = '2'
- ERROR = '3'
- end
-
- def parse(raw_response)
- rsp = CGI.parse(raw_response)
- rsp.keys.each { |k| rsp[k] = rsp[k].first } # flatten out the values
- rsp
- end
end
end
end