lib/active_merchant/billing/gateways/cyber_source.rb in activemerchant-1.129.0 vs lib/active_merchant/billing/gateways/cyber_source.rb in activemerchant-1.130.0
- old
+ new
@@ -517,15 +517,13 @@
end
def add_business_rules_data(xml, payment_method, options)
prioritized_options = [options, @options]
- unless network_tokenization?(payment_method)
- xml.tag! 'businessRules' do
- xml.tag!('ignoreAVSResult', 'true') if extract_option(prioritized_options, :ignore_avs).to_s == 'true'
- xml.tag!('ignoreCVResult', 'true') if extract_option(prioritized_options, :ignore_cvv).to_s == 'true'
- end
+ xml.tag! 'businessRules' do
+ xml.tag!('ignoreAVSResult', 'true') if extract_option(prioritized_options, :ignore_avs).to_s == 'true'
+ xml.tag!('ignoreCVResult', 'true') if extract_option(prioritized_options, :ignore_cvv).to_s == 'true'
end
end
def extract_option(prioritized_options, option_name)
options_matching_key = prioritized_options.detect do |options|
@@ -703,12 +701,12 @@
end
def add_check(xml, check, options)
xml.tag! 'check' do
xml.tag! 'accountNumber', check.account_number
- xml.tag! 'accountType', check.account_type[0]
- xml.tag! 'bankTransitNumber', check.routing_number
+ xml.tag! 'accountType', check.account_type == 'checking' ? 'C' : 'S'
+ xml.tag! 'bankTransitNumber', format_routing_number(check.routing_number, options)
xml.tag! 'secCode', options[:sec_code] if options[:sec_code]
end
end
def add_tax_service(xml)
@@ -1053,18 +1051,28 @@
success = success?(response)
message = message_from(response)
authorization = success || in_fraud_review?(response) ? authorization_from(response, action, amount, options) : nil
+ message = auto_void?(authorization_from(response, action, amount, options), response, message, options)
+
Response.new(success, message, response,
test: test?,
authorization: authorization,
fraud_review: in_fraud_review?(response),
avs_result: { code: response[:avsCode] },
cvv_result: response[:cvCode])
end
+ def auto_void?(authorization, response, message, options = {})
+ return message unless response[:reasonCode] == '230' && options[:auto_void_230]
+
+ response = void(authorization, options)
+ response&.success? ? message += ' - transaction has been auto-voided.' : message += ' - transaction could not be auto-voided.'
+ message
+ end
+
# Parse the SOAP response
# Technique inspired by the Paypal Gateway
def parse(xml)
reply = {}
xml = REXML::Document.new(xml)
@@ -1128,9 +1136,13 @@
end
end
def eligible_for_zero_auth?(payment_method, options = {})
payment_method.is_a?(CreditCard) && options[:zero_amount_auth]
+ end
+
+ def format_routing_number(routing_number, options)
+ options[:currency] == 'CAD' && routing_number.length > 8 ? routing_number[-8..-1] : routing_number
end
end
end
end