activemerchant 1.106.0 → 1.107.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +19 -0
- data/lib/active_merchant/billing/gateways/borgun.rb +15 -4
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +13 -5
- data/lib/active_merchant/billing/gateways/cyber_source.rb +2 -1
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +1 -1
- data/lib/active_merchant/billing/gateways/global_collect.rb +30 -24
- data/lib/active_merchant/billing/gateways/opp.rb +12 -6
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +4 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +1 -1
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +1 -1
- data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +14 -4
- data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
- data/lib/active_merchant/version.rb +1 -1
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 88249628bc56fb775fc6cc669fceea51b9040ced2f7c2dea503cd276a37202d1
         | 
| 4 | 
            +
              data.tar.gz: f538ae45a677ec066b40dbb68742b1df9ccea5e7d45e0bd9e28d88968ae77334
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 06c755605d7633a83cc1e2b9cfbf0cdf00d320e8bcd345cfdb6539ad814b9795ac4e33e075941f9b0761768ae9a6f3cb2bad90dd2ed35eca0fce7a8aa9642f55
         | 
| 7 | 
            +
              data.tar.gz: e35ac5cfa97a22fdc416c0031e20f398b62189bb091e20b9c17fc815d2db2d481aa5463d047a5d718ec07574249c57acf1defec69c5ff7156f9be80220361b3d
         | 
    
        data/CHANGELOG
    CHANGED
    
    | @@ -2,6 +2,25 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            == HEAD
         | 
| 4 4 |  | 
| 5 | 
            +
            == Version 1.107.1 (Apr 1, 2020)
         | 
| 6 | 
            +
            * Add `allowed_push_host` to gemspec [mdeloupy]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            == Version 1.107.0 (Apr 1, 2020)
         | 
| 9 | 
            +
            * Stripe Payment Intents: Early return failed `payment_methods` response [chinhle23] #3570
         | 
| 10 | 
            +
            * Borgun: Support `passengerItineraryData` [therufs] #3572
         | 
| 11 | 
            +
            * Ingenico GlobalCollect: support optional `requires_approval` field [fatcatt316] #3571
         | 
| 12 | 
            +
            * CenPOS: Update failing remote tests [britth] #3575
         | 
| 13 | 
            +
            * Realex: Update remote tests [britth] #3576
         | 
| 14 | 
            +
            * FirstData e4 v27: Properly tag stored credential initiation field in request [britth] #3578
         | 
| 15 | 
            +
            * Orbital: Fix stored credentials [chinhle23] #3579
         | 
| 16 | 
            +
            * Acapture(Opp): Update gateway credentials [molbrown] #3574
         | 
| 17 | 
            +
            * Ingenico GlobalCollect: support `requires_approval` field [fatcatt316] #3577
         | 
| 18 | 
            +
            * CyberSource: Fix `void` for `purchase` transactions [chinhle23] #3581
         | 
| 19 | 
            +
            * Checkout V2: Begin to add support for using network tokens for transactions. [arbianchi] #3580
         | 
| 20 | 
            +
            * Opp: Update remote test fixtures [ccarruitero] #3582
         | 
| 21 | 
            +
            * Optimal Payment: Add support for store [britth] #3585
         | 
| 22 | 
            +
            * SecurePay Australia : Update test URL (#3586)
         | 
| 23 | 
            +
             | 
| 5 24 | 
             
            == Version 1.106.0 (Mar 10, 2020)
         | 
| 6 25 | 
             
            * PayJunctionV2: Send billing address in `auth` and `purchase` transactions [naashton] #3538
         | 
| 7 26 | 
             
            * Adyen: Fix some remote tests [curiousepic] #3541
         | 
| @@ -34,7 +34,7 @@ module ActiveMerchant #:nodoc: | |
| 34 34 | 
             
                    post[:TransType] = '5'
         | 
| 35 35 | 
             
                    add_invoice(post, money, options)
         | 
| 36 36 | 
             
                    add_payment_method(post, payment)
         | 
| 37 | 
            -
                    commit('authonly', post)
         | 
| 37 | 
            +
                    commit('authonly', post, options)
         | 
| 38 38 | 
             
                  end
         | 
| 39 39 |  | 
| 40 40 | 
             
                  def capture(money, authorization, options={})
         | 
| @@ -125,12 +125,12 @@ module ActiveMerchant #:nodoc: | |
| 125 125 | 
             
                    response
         | 
| 126 126 | 
             
                  end
         | 
| 127 127 |  | 
| 128 | 
            -
                  def commit(action, post)
         | 
| 128 | 
            +
                  def commit(action, post, options={})
         | 
| 129 129 | 
             
                    post[:Version] = '1000'
         | 
| 130 130 | 
             
                    post[:Processor] = @options[:processor]
         | 
| 131 131 | 
             
                    post[:MerchantID] = @options[:merchant_id]
         | 
| 132 132 |  | 
| 133 | 
            -
                    request = build_request(action, post)
         | 
| 133 | 
            +
                    request = build_request(action, post, options)
         | 
| 134 134 | 
             
                    raw = ssl_post(url(action), request, headers)
         | 
| 135 135 | 
             
                    pairs = parse(raw)
         | 
| 136 136 | 
             
                    success = success_from(pairs)
         | 
| @@ -180,7 +180,7 @@ module ActiveMerchant #:nodoc: | |
| 180 180 | 
             
                    }
         | 
| 181 181 | 
             
                  end
         | 
| 182 182 |  | 
| 183 | 
            -
                  def build_request(action, post)
         | 
| 183 | 
            +
                  def build_request(action, post, options={})
         | 
| 184 184 | 
             
                    mode = action == 'void' ? 'cancel' : 'get'
         | 
| 185 185 | 
             
                    xml = Builder::XmlMarkup.new indent: 18
         | 
| 186 186 | 
             
                    xml.instruct!(:xml, version: '1.0', encoding: 'utf-8')
         | 
| @@ -188,11 +188,22 @@ module ActiveMerchant #:nodoc: | |
| 188 188 | 
             
                      post.each do |field, value|
         | 
| 189 189 | 
             
                        xml.tag!(field, value)
         | 
| 190 190 | 
             
                      end
         | 
| 191 | 
            +
                      build_airline_xml(xml, options[:passenger_itinerary_data]) if options[:passenger_itinerary_data]
         | 
| 191 192 | 
             
                    end
         | 
| 192 193 | 
             
                    inner = CGI.escapeHTML(xml.target!)
         | 
| 193 194 | 
             
                    envelope(mode).sub(/{{ :body }}/, inner)
         | 
| 194 195 | 
             
                  end
         | 
| 195 196 |  | 
| 197 | 
            +
                  def build_airline_xml(xml, airline_data)
         | 
| 198 | 
            +
                    xml.tag!('PassengerItineraryData') do
         | 
| 199 | 
            +
                      xml.tag!('A1') do
         | 
| 200 | 
            +
                        airline_data.each do |field, value|
         | 
| 201 | 
            +
                          xml.tag!(field, value)
         | 
| 202 | 
            +
                        end
         | 
| 203 | 
            +
                      end
         | 
| 204 | 
            +
                    end
         | 
| 205 | 
            +
                  end
         | 
| 206 | 
            +
             | 
| 196 207 | 
             
                  def envelope(mode)
         | 
| 197 208 | 
             
                    <<-EOS
         | 
| 198 209 | 
             
                      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://Borgun/Heimir/pub/ws/Authorization">
         | 
| @@ -102,13 +102,21 @@ module ActiveMerchant #:nodoc: | |
| 102 102 |  | 
| 103 103 | 
             
                  def add_payment_method(post, payment_method, options)
         | 
| 104 104 | 
             
                    post[:source] = {}
         | 
| 105 | 
            -
                     | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 105 | 
            +
                    if payment_method.is_a?(NetworkTokenizationCreditCard) && payment_method.source == :network_token
         | 
| 106 | 
            +
                      post[:source][:type] = 'network_token'
         | 
| 107 | 
            +
                      post[:source][:token] = payment_method.number
         | 
| 108 | 
            +
                      post[:source][:token_type] = payment_method.brand == 'visa' ? 'vts' : 'mdes'
         | 
| 109 | 
            +
                      post[:source][:cryptogram] = payment_method.payment_cryptogram
         | 
| 110 | 
            +
                      post[:source][:eci] = options[:eci] || '05'
         | 
| 111 | 
            +
                    else
         | 
| 112 | 
            +
                      post[:source][:type] = 'card'
         | 
| 113 | 
            +
                      post[:source][:name] = payment_method.name
         | 
| 114 | 
            +
                      post[:source][:number] = payment_method.number
         | 
| 115 | 
            +
                      post[:source][:cvv] = payment_method.verification_value
         | 
| 116 | 
            +
                      post[:source][:stored] = 'true' if options[:card_on_file] == true
         | 
| 117 | 
            +
                    end
         | 
| 109 118 | 
             
                    post[:source][:expiry_year] = format(payment_method.year, :four_digits)
         | 
| 110 119 | 
             
                    post[:source][:expiry_month] = format(payment_method.month, :two_digits)
         | 
| 111 | 
            -
                    post[:source][:stored] = 'true' if options[:card_on_file] == true
         | 
| 112 120 | 
             
                  end
         | 
| 113 121 |  | 
| 114 122 | 
             
                  def add_customer_data(post, options)
         | 
| @@ -325,7 +325,8 @@ module ActiveMerchant #:nodoc: | |
| 325 325 | 
             
                    options[:order_id] = order_id
         | 
| 326 326 |  | 
| 327 327 | 
             
                    xml = Builder::XmlMarkup.new indent: 2
         | 
| 328 | 
            -
                     | 
| 328 | 
            +
                    case action
         | 
| 329 | 
            +
                    when 'capture', 'purchase'
         | 
| 329 330 | 
             
                      add_mdd_fields(xml, options)
         | 
| 330 331 | 
             
                      add_void_service(xml, request_id, request_token)
         | 
| 331 332 | 
             
                    else
         | 
| @@ -319,7 +319,7 @@ module ActiveMerchant #:nodoc: | |
| 319 319 | 
             
                    xml.tag! 'StoredCredentials' do
         | 
| 320 320 | 
             
                      xml.tag! 'Indicator', stored_credential_indicator(xml, card, options)
         | 
| 321 321 | 
             
                      if initiator = options.dig(:stored_credential, :initiator)
         | 
| 322 | 
            -
                        xml.tag! initiator == 'merchant' ? 'M' : 'C'
         | 
| 322 | 
            +
                        xml.tag! 'Initiation', initiator == 'merchant' ? 'M' : 'C'
         | 
| 323 323 | 
             
                      end
         | 
| 324 324 | 
             
                      if reason_type = options.dig(:stored_credential, :reason_type)
         | 
| 325 325 | 
             
                        xml.tag! 'Schedule', reason_type == 'unscheduled' ? 'U' : 'S'
         | 
| @@ -7,10 +7,10 @@ module ActiveMerchant #:nodoc: | |
| 7 7 | 
             
                  self.test_url = 'https://eu.sandbox.api-ingenico.com'
         | 
| 8 8 | 
             
                  self.live_url = 'https://api.globalcollect.com'
         | 
| 9 9 |  | 
| 10 | 
            -
                  self.supported_countries = [ | 
| 10 | 
            +
                  self.supported_countries = %w[AD AE AG AI AL AM AO AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BW BY BZ CA CC CD CF CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HN HR HT HU ID IE IL IM IN IS IT JM JO JP KE KG KH KI KM KN KR KW KY KZ LA LB LC LI LK LR LS LT LU LV MA MC MD ME MF MG MH MK MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PL PN PS PT PW QA RE RO RS RU RW SA SB SC SE SG SH SI SJ SK SL SM SN SR ST SV SZ TC TD TG TH TJ TL TM TN TO TR TT TV TW TZ UA UG US UY UZ VC VE VG VI VN WF WS ZA ZM ZW]
         | 
| 11 11 | 
             
                  self.default_currency = 'USD'
         | 
| 12 12 | 
             
                  self.money_format = :cents
         | 
| 13 | 
            -
                  self.supported_cardtypes = [ | 
| 13 | 
            +
                  self.supported_cardtypes = %i[visa master american_express discover naranja cabal]
         | 
| 14 14 |  | 
| 15 15 | 
             
                  def initialize(options={})
         | 
| 16 16 | 
             
                    requires!(options, :merchant_id, :api_key_id, :secret_api_key)
         | 
| @@ -20,7 +20,7 @@ module ActiveMerchant #:nodoc: | |
| 20 20 | 
             
                  def purchase(money, payment, options={})
         | 
| 21 21 | 
             
                    MultiResponse.run do |r|
         | 
| 22 22 | 
             
                      r.process { authorize(money, payment, options) }
         | 
| 23 | 
            -
                      r.process { capture(money, r.authorization, options) }  | 
| 23 | 
            +
                      r.process { capture(money, r.authorization, options) } if should_request_capture?(r, options[:requires_approval])
         | 
| 24 24 | 
             
                    end
         | 
| 25 25 | 
             
                  end
         | 
| 26 26 |  | 
| @@ -32,7 +32,6 @@ module ActiveMerchant #:nodoc: | |
| 32 32 | 
             
                    add_address(post, payment, options)
         | 
| 33 33 | 
             
                    add_creator_info(post, options)
         | 
| 34 34 | 
             
                    add_fraud_fields(post, options)
         | 
| 35 | 
            -
             | 
| 36 35 | 
             
                    commit(:authorize, post)
         | 
| 37 36 | 
             
                  end
         | 
| 38 37 |  | 
| @@ -161,6 +160,8 @@ module ActiveMerchant #:nodoc: | |
| 161 160 | 
             
                      'skipFraudService' => 'true',
         | 
| 162 161 | 
             
                      'authorizationMode' => pre_authorization
         | 
| 163 162 | 
             
                    }
         | 
| 163 | 
            +
                    post['cardPaymentMethodSpecificInput']['requiresApproval'] = options[:requires_approval] unless options[:requires_approval].nil?
         | 
| 164 | 
            +
             | 
| 164 165 | 
             
                    post['cardPaymentMethodSpecificInput']['card'] = {
         | 
| 165 166 | 
             
                      'cvv' => payment.verification_value,
         | 
| 166 167 | 
             
                      'cardNumber' => payment.number,
         | 
| @@ -283,7 +284,7 @@ module ActiveMerchant #:nodoc: | |
| 283 284 |  | 
| 284 285 | 
             
                  def headers(action, post, authorization = nil)
         | 
| 285 286 | 
             
                    {
         | 
| 286 | 
            -
                      'Content-Type' | 
| 287 | 
            +
                      'Content-Type' => content_type,
         | 
| 287 288 | 
             
                      'Authorization' => auth_digest(action, post, authorization),
         | 
| 288 289 | 
             
                      'Date' => date
         | 
| 289 290 | 
             
                    }
         | 
| @@ -314,18 +315,16 @@ POST | |
| 314 315 | 
             
                  end
         | 
| 315 316 |  | 
| 316 317 | 
             
                  def message_from(succeeded, response)
         | 
| 317 | 
            -
                    if succeeded
         | 
| 318 | 
            -
             | 
| 318 | 
            +
                    return 'Succeeded' if succeeded
         | 
| 319 | 
            +
             | 
| 320 | 
            +
                    if errors = response['errors']
         | 
| 321 | 
            +
                      errors.first.try(:[], 'message')
         | 
| 322 | 
            +
                    elsif response['error_message']
         | 
| 323 | 
            +
                      response['error_message']
         | 
| 324 | 
            +
                    elsif response['status']
         | 
| 325 | 
            +
                      'Status: ' + response['status']
         | 
| 319 326 | 
             
                    else
         | 
| 320 | 
            -
                       | 
| 321 | 
            -
                        errors.first.try(:[], 'message')
         | 
| 322 | 
            -
                      elsif response['error_message']
         | 
| 323 | 
            -
                        response['error_message']
         | 
| 324 | 
            -
                      elsif response['status']
         | 
| 325 | 
            -
                        'Status: ' + response['status']
         | 
| 326 | 
            -
                      else
         | 
| 327 | 
            -
                        'No message available'
         | 
| 328 | 
            -
                      end
         | 
| 327 | 
            +
                      'No message available'
         | 
| 329 328 | 
             
                    end
         | 
| 330 329 | 
             
                  end
         | 
| 331 330 |  | 
| @@ -340,14 +339,14 @@ POST | |
| 340 339 | 
             
                  end
         | 
| 341 340 |  | 
| 342 341 | 
             
                  def error_code_from(succeeded, response)
         | 
| 343 | 
            -
                     | 
| 344 | 
            -
             | 
| 345 | 
            -
             | 
| 346 | 
            -
                       | 
| 347 | 
            -
             | 
| 348 | 
            -
                       | 
| 349 | 
            -
             | 
| 350 | 
            -
                       | 
| 342 | 
            +
                    return if succeeded
         | 
| 343 | 
            +
             | 
| 344 | 
            +
                    if errors = response['errors']
         | 
| 345 | 
            +
                      errors.first.try(:[], 'code')
         | 
| 346 | 
            +
                    elsif status = response.try(:[], 'statusOutput').try(:[], 'statusCode')
         | 
| 347 | 
            +
                      status.to_s
         | 
| 348 | 
            +
                    else
         | 
| 349 | 
            +
                      'No error code available'
         | 
| 351 350 | 
             
                    end
         | 
| 352 351 | 
             
                  end
         | 
| 353 352 |  | 
| @@ -355,6 +354,13 @@ POST | |
| 355 354 | 
             
                    Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
         | 
| 356 355 | 
             
                  end
         | 
| 357 356 |  | 
| 357 | 
            +
                  # Capture hasn't already been requested,
         | 
| 358 | 
            +
                  # and
         | 
| 359 | 
            +
                  # `requires_approval` is not false
         | 
| 360 | 
            +
                  def should_request_capture?(response, requires_approval)
         | 
| 361 | 
            +
                    !capture_requested?(response) && requires_approval != false
         | 
| 362 | 
            +
                  end
         | 
| 363 | 
            +
             | 
| 358 364 | 
             
                  def capture_requested?(response)
         | 
| 359 365 | 
             
                    response.params.try(:[], 'payment').try(:[], 'status') == 'CAPTURE_REQUESTED'
         | 
| 360 366 | 
             
                  end
         | 
| @@ -13,8 +13,7 @@ module ActiveMerchant #:nodoc: | |
| 13 13 | 
             
                  # == Usage
         | 
| 14 14 | 
             
                  #
         | 
| 15 15 | 
             
                  #   gateway = ActiveMerchant::Billing::OppGateway.new(
         | 
| 16 | 
            -
                  #       | 
| 17 | 
            -
                  #      password: 'password',
         | 
| 16 | 
            +
                  #      access_token: 'access_token',
         | 
| 18 17 | 
             
                  #      entity_id: 'entity id',
         | 
| 19 18 | 
             
                  #   )
         | 
| 20 19 | 
             
                  #
         | 
| @@ -119,7 +118,7 @@ module ActiveMerchant #:nodoc: | |
| 119 118 | 
             
                  self.display_name = 'Open Payment Platform'
         | 
| 120 119 |  | 
| 121 120 | 
             
                  def initialize(options={})
         | 
| 122 | 
            -
                    requires!(options, : | 
| 121 | 
            +
                    requires!(options, :access_token, :entity_id)
         | 
| 123 122 | 
             
                    super
         | 
| 124 123 | 
             
                  end
         | 
| 125 124 |  | 
| @@ -167,7 +166,7 @@ module ActiveMerchant #:nodoc: | |
| 167 166 |  | 
| 168 167 | 
             
                  def scrub(transcript)
         | 
| 169 168 | 
             
                    transcript.
         | 
| 170 | 
            -
                      gsub(%r(( | 
| 169 | 
            +
                      gsub(%r((Authorization: Bearer )\w+)i, '\1[FILTERED]').
         | 
| 171 170 | 
             
                      gsub(%r((card\.number=)\d+), '\1[FILTERED]').
         | 
| 172 171 | 
             
                      gsub(%r((card\.cvv=)\d+), '\1[FILTERED]')
         | 
| 173 172 | 
             
                  end
         | 
| @@ -203,7 +202,7 @@ module ActiveMerchant #:nodoc: | |
| 203 202 | 
             
                  end
         | 
| 204 203 |  | 
| 205 204 | 
             
                  def add_authentication(post)
         | 
| 206 | 
            -
                    post[:authentication] = { entityId: @options[:entity_id] | 
| 205 | 
            +
                    post[:authentication] = { entityId: @options[:entity_id] }
         | 
| 207 206 | 
             
                  end
         | 
| 208 207 |  | 
| 209 208 | 
             
                  def add_customer_data(post, payment, options)
         | 
| @@ -316,7 +315,7 @@ module ActiveMerchant #:nodoc: | |
| 316 315 | 
             
                          ssl_post(
         | 
| 317 316 | 
             
                            url,
         | 
| 318 317 | 
             
                            post.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&'),
         | 
| 319 | 
            -
                             | 
| 318 | 
            +
                            headers
         | 
| 320 319 | 
             
                          )
         | 
| 321 320 | 
             
                        )
         | 
| 322 321 | 
             
                      rescue ResponseError => e
         | 
| @@ -335,6 +334,13 @@ module ActiveMerchant #:nodoc: | |
| 335 334 | 
             
                    )
         | 
| 336 335 | 
             
                  end
         | 
| 337 336 |  | 
| 337 | 
            +
                  def headers
         | 
| 338 | 
            +
                    {
         | 
| 339 | 
            +
                      'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8',
         | 
| 340 | 
            +
                      'Authorization' => "Bearer #{@options[:access_token]}"
         | 
| 341 | 
            +
                    }
         | 
| 342 | 
            +
                  end
         | 
| 343 | 
            +
             | 
| 338 344 | 
             
                  def parse(body)
         | 
| 339 345 | 
             
                    JSON.parse(body)
         | 
| 340 346 | 
             
                  rescue JSON::ParserError
         | 
| @@ -8,7 +8,7 @@ module ActiveMerchant #:nodoc: | |
| 8 8 |  | 
| 9 9 | 
             
                  class_attribute :test_periodic_url, :live_periodic_url
         | 
| 10 10 |  | 
| 11 | 
            -
                  self.test_url = 'https://api.securepay.com.au/ | 
| 11 | 
            +
                  self.test_url = 'https://test.api.securepay.com.au/xmlapi/payment'
         | 
| 12 12 | 
             
                  self.live_url = 'https://api.securepay.com.au/xmlapi/payment'
         | 
| 13 13 |  | 
| 14 14 | 
             
                  self.test_periodic_url = 'https://test.securepay.com.au/xmlapi/periodic'
         | 
| @@ -20,7 +20,9 @@ module ActiveMerchant #:nodoc: | |
| 20 20 | 
             
                    add_capture_method(post, options)
         | 
| 21 21 | 
             
                    add_confirmation_method(post, options)
         | 
| 22 22 | 
             
                    add_customer(post, options)
         | 
| 23 | 
            -
                    add_payment_method_token(post, payment_method, options)
         | 
| 23 | 
            +
                    payment_method = add_payment_method_token(post, payment_method, options)
         | 
| 24 | 
            +
                    return payment_method if payment_method.is_a?(ActiveMerchant::Billing::Response)
         | 
| 25 | 
            +
             | 
| 24 26 | 
             
                    add_metadata(post, options)
         | 
| 25 27 | 
             
                    add_return_url(post, options)
         | 
| 26 28 | 
             
                    add_connected_account(post, options)
         | 
| @@ -41,7 +43,9 @@ module ActiveMerchant #:nodoc: | |
| 41 43 |  | 
| 42 44 | 
             
                  def confirm_intent(intent_id, payment_method, options = {})
         | 
| 43 45 | 
             
                    post = {}
         | 
| 44 | 
            -
                    add_payment_method_token(post, payment_method, options)
         | 
| 46 | 
            +
                    payment_method = add_payment_method_token(post, payment_method, options)
         | 
| 47 | 
            +
                    return payment_method if payment_method.is_a?(ActiveMerchant::Billing::Response)
         | 
| 48 | 
            +
             | 
| 45 49 | 
             
                    CONFIRM_INTENT_ATTRIBUTES.each do |attribute|
         | 
| 46 50 | 
             
                      add_whitelisted_attribute(post, options, attribute)
         | 
| 47 51 | 
             
                    end
         | 
| @@ -65,7 +69,9 @@ module ActiveMerchant #:nodoc: | |
| 65 69 | 
             
                    post = {}
         | 
| 66 70 | 
             
                    add_amount(post, money, options)
         | 
| 67 71 |  | 
| 68 | 
            -
                    add_payment_method_token(post, payment_method, options)
         | 
| 72 | 
            +
                    payment_method = add_payment_method_token(post, payment_method, options)
         | 
| 73 | 
            +
                    return payment_method if payment_method.is_a?(ActiveMerchant::Billing::Response)
         | 
| 74 | 
            +
             | 
| 69 75 | 
             
                    add_payment_method_types(post, options)
         | 
| 70 76 | 
             
                    add_customer(post, options)
         | 
| 71 77 | 
             
                    add_metadata(post, options)
         | 
| @@ -121,7 +127,9 @@ module ActiveMerchant #:nodoc: | |
| 121 127 | 
             
                    # If customer option is provided, create a payment method and attach to customer id
         | 
| 122 128 | 
             
                    # Otherwise, create a customer, then attach
         | 
| 123 129 | 
             
                    if payment_method.is_a?(StripePaymentToken) || payment_method.is_a?(ActiveMerchant::Billing::CreditCard)
         | 
| 124 | 
            -
                      add_payment_method_token(params, payment_method, options)
         | 
| 130 | 
            +
                      payment_method = add_payment_method_token(params, payment_method, options)
         | 
| 131 | 
            +
                      return payment_method if payment_method.is_a?(ActiveMerchant::Billing::Response)
         | 
| 132 | 
            +
             | 
| 125 133 | 
             
                      if options[:customer]
         | 
| 126 134 | 
             
                        customer_id = options[:customer]
         | 
| 127 135 | 
             
                      else
         | 
| @@ -191,6 +199,8 @@ module ActiveMerchant #:nodoc: | |
| 191 199 |  | 
| 192 200 | 
             
                    if payment_method.is_a?(ActiveMerchant::Billing::CreditCard)
         | 
| 193 201 | 
             
                      p = create_payment_method(payment_method, options)
         | 
| 202 | 
            +
                      return p unless p.success?
         | 
| 203 | 
            +
             | 
| 194 204 | 
             
                      payment_method = p.params['id']
         | 
| 195 205 | 
             
                    end
         | 
| 196 206 |  | 
| @@ -17,7 +17,7 @@ module ActiveMerchant #:nodoc: | |
| 17 17 | 
             
                  attr_accessor :payment_cryptogram, :eci, :transaction_id
         | 
| 18 18 | 
             
                  attr_writer :source
         | 
| 19 19 |  | 
| 20 | 
            -
                  SOURCES = %i(apple_pay android_pay google_pay)
         | 
| 20 | 
            +
                  SOURCES = %i(apple_pay android_pay google_pay network_token)
         | 
| 21 21 |  | 
| 22 22 | 
             
                  def source
         | 
| 23 23 | 
             
                    if defined?(@source) && SOURCES.include?(@source)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activemerchant
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.107.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tobias Luetke
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-04-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -412,7 +412,8 @@ files: | |
| 412 412 | 
             
            homepage: http://activemerchant.org/
         | 
| 413 413 | 
             
            licenses:
         | 
| 414 414 | 
             
            - MIT
         | 
| 415 | 
            -
            metadata: | 
| 415 | 
            +
            metadata:
         | 
| 416 | 
            +
              allowed_push_host: https://rubygems.org
         | 
| 416 417 | 
             
            post_install_message: 
         | 
| 417 418 | 
             
            rdoc_options: []
         | 
| 418 419 | 
             
            require_paths:
         |