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