class ActiveMerchant::Billing::IridiumGateway
For more information on the Iridium Gateway
please download the documentation from their Merchant Management System.
The login and password are not the username and password you use to login to the Iridium Merchant Management System. Instead, you will use the API username and password you were issued separately.
Constants
- AVS_CODE
- CURRENCY_CODES
- CVV_CODE
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/iridium.rb, line 225 def initialize(options = {}) requires!(options, :login, :password) super end
Public Instance Methods
capture(money, authorization, options = {})
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 250 def capture(money, authorization, options = {}) commit(build_reference_request('COLLECTION', money, authorization, options), options) end
credit(money, authorization, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 254 def credit(money, authorization, options={}) ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE refund(money, authorization, options) end
purchase(money, payment_source, options = {})
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 240 def purchase(money, payment_source, options = {}) setup_address_hash(options) if payment_source.respond_to?(:number) commit(build_purchase_request('SALE', money, payment_source, options), options) else commit(build_reference_request('SALE', money, payment_source, options), options) end end
refund(money, authorization, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 259 def refund(money, authorization, options={}) commit(build_reference_request('REFUND', money, authorization, options), options) end
void(authorization, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 263 def void(authorization, options={}) commit(build_reference_request('VOID', nil, authorization, options), options) end
Private Instance Methods
add_creditcard(xml, creditcard)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 353 def add_creditcard(xml, creditcard) xml.tag! 'CardDetails' do xml.tag! 'CardName', creditcard.name xml.tag! 'CV2', creditcard.verification_value if creditcard.verification_value xml.tag! 'CardNumber', creditcard.number xml.tag! 'ExpiryDate', { 'Month' => creditcard.month.to_s.rjust(2, "0"), 'Year' => creditcard.year.to_s[/\d\d$/] } end end
add_customerdetails(xml, creditcard, address, options, shipTo = false)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 331 def add_customerdetails(xml, creditcard, address, options, shipTo = false) xml.tag! 'CustomerDetails' do if address unless address[:country].blank? country_code = Country.find(address[:country]).code(:numeric) end xml.tag! 'BillingAddress' do xml.tag! 'Address1', address[:address1] xml.tag! 'Address2', address[:address2] xml.tag! 'City', address[:city] xml.tag! 'State', address[:state] xml.tag! 'PostCode', address[:zip] xml.tag! 'CountryCode', country_code if country_code end xml.tag! 'PhoneNumber', address[:phone] end xml.tag! 'EmailAddress', options[:email] xml.tag! 'CustomerIPAddress', options[:ip] || "127.0.0.1" end end
add_merchant_data(xml, options)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 362 def add_merchant_data(xml, options) xml.tag! 'MerchantAuthentication', {"MerchantID" => @options[:login], "Password" => @options[:password]} end
add_purchase_data(xml, type, money, options)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 318 def add_purchase_data(xml, type, money, options) requires!(options, :order_id) xml.tag! 'TransactionDetails', {'Amount' => amount(money), 'CurrencyCode' => currency_code(options[:currency] || currency(money))} do xml.tag! 'MessageDetails', {'TransactionType' => type} xml.tag! 'OrderID', options[:order_id] xml.tag! 'TransactionControl' do xml.tag! 'ThreeDSecureOverridePolicy', 'FALSE' xml.tag! 'EchoAVSCheckResult', 'TRUE' xml.tag! 'EchoCV2CheckResult', 'TRUE' end end end
build_purchase_request(type, money, creditcard, options)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 269 def build_purchase_request(type, money, creditcard, options) options.merge!(:action => 'CardDetailsTransaction') build_request(options) do |xml| add_purchase_data(xml, type, money, options) add_creditcard(xml, creditcard) add_customerdetails(xml, creditcard, options[:billing_address], options) end end
build_reference_request(type, money, authorization, options)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 278 def build_reference_request(type, money, authorization, options) options.merge!(:action => 'CrossReferenceTransaction') order_id, cross_reference, _ = authorization.split(";") build_request(options) do |xml| if money details = {'CurrencyCode' => currency_code(options[:currency] || default_currency), 'Amount' => amount(money)} else details = {'CurrencyCode' => currency_code(default_currency), 'Amount' => '0'} end xml.tag! 'TransactionDetails', details do xml.tag! 'MessageDetails', {'TransactionType' => type, 'CrossReference' => cross_reference} xml.tag! 'OrderID', (options[:order_id] || order_id) end end end
build_request(options) { |xml| ... }
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 294 def build_request(options) requires!(options, :action) xml = Builder::XmlMarkup.new :indent => 2 xml.instruct!(:xml, :version => '1.0', :encoding => 'utf-8') xml.tag! 'soap:Envelope', { 'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'} do xml.tag! 'soap:Body' do xml.tag! options[:action], {'xmlns' => "https://www.thepaymentgateway.net/"} do xml.tag! 'PaymentMessage' do add_merchant_data(xml, options) yield(xml) end end end end xml.target! end
commit(request, options)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 366 def commit(request, options) requires!(options, :action) response = parse(ssl_post(test? ? self.test_url : self.live_url, request, {"SOAPAction" => "https://www.thepaymentgateway.net/#{options[:action]}", "Content-Type" => "text/xml; charset=utf-8" })) success = response[:transaction_result][:status_code] == "0" message = response[:transaction_result][:message] authorization = success ? [ options[:order_id], response[:transaction_output_data][:cross_reference], response[:transaction_output_data][:auth_code] ].compact.join(";") : nil Response.new(success, message, response, :test => test?, :authorization => authorization, :avs_result => { :street_match => AVS_CODE[ response[:transaction_output_data][:address_numeric_check_result] ], :postal_match => AVS_CODE[ response[:transaction_output_data][:post_code_check_result] ], }, :cvv_result => CVV_CODE[ response[:transaction_output_data][:cv2_check_result] ] ) end
currency_code(currency)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 452 def currency_code(currency) CURRENCY_CODES[currency] end
parse(xml)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 387 def parse(xml) reply = {} xml = REXML::Document.new(xml) if (root = REXML::XPath.first(xml, "//CardDetailsTransactionResponse")) or (root = REXML::XPath.first(xml, "//CrossReferenceTransactionResponse")) root.elements.to_a.each do |node| case node.name when 'Message' reply[:message] = reply(node.text) else parse_element(reply, node) end end elsif root = REXML::XPath.first(xml, "//soap:Fault") parse_element(reply, root) reply[:message] = "#{reply[:faultcode]}: #{reply[:faultstring]}" end reply end
parse_element(reply, node)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 407 def parse_element(reply, node) case node.name when "CrossReferenceTransactionResult" reply[:transaction_result] = {} node.attributes.each do |a,b| reply[:transaction_result][a.underscore.to_sym] = b end node.elements.each{|e| parse_element(reply[:transaction_result], e) } if node.has_elements? when "CardDetailsTransactionResult" reply[:transaction_result] = {} node.attributes.each do |a,b| reply[:transaction_result][a.underscore.to_sym] = b end node.elements.each{|e| parse_element(reply[:transaction_result], e) } if node.has_elements? when "TransactionOutputData" reply[:transaction_output_data] = {} node.attributes.each{|a,b| reply[:transaction_output_data][a.underscore.to_sym] = b } node.elements.each{|e| parse_element(reply[:transaction_output_data], e) } if node.has_elements? when "CustomVariables" reply[:custom_variables] = {} node.attributes.each{|a,b| reply[:custom_variables][a.underscore.to_sym] = b } node.elements.each{|e| parse_element(reply[:custom_variables], e) } if node.has_elements? when "GatewayEntryPoints" reply[:gateway_entry_points] = {} node.attributes.each{|a,b| reply[:gateway_entry_points][a.underscore.to_sym] = b } node.elements.each{|e| parse_element(reply[:gateway_entry_points], e) } if node.has_elements? else k = node.name.underscore.to_sym if node.has_elements? reply[k] = {} node.elements.each{|e| parse_element(reply[k], e) } else if node.has_attributes? reply[k] = {} node.attributes.each{|a,b| reply[k][a.underscore.to_sym] = b } else reply[k] = node.text end end end reply end
setup_address_hash(options)
click to toggle source
# File lib/active_merchant/billing/gateways/iridium.rb, line 313 def setup_address_hash(options) options[:billing_address] = options[:billing_address] || options[:address] || {} options[:shipping_address] = options[:shipping_address] || {} end