activemerchant 1.126.0 → 1.129.0

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +241 -0
  3. data/lib/active_merchant/billing/check.rb +40 -8
  4. data/lib/active_merchant/billing/credit_card.rb +28 -1
  5. data/lib/active_merchant/billing/credit_card_methods.rb +79 -23
  6. data/lib/active_merchant/billing/gateways/adyen.rb +67 -8
  7. data/lib/active_merchant/billing/gateways/airwallex.rb +40 -11
  8. data/lib/active_merchant/billing/gateways/alelo.rb +256 -0
  9. data/lib/active_merchant/billing/gateways/authorize_net.rb +21 -4
  10. data/lib/active_merchant/billing/gateways/beanstream.rb +18 -0
  11. data/lib/active_merchant/billing/gateways/blue_snap.rb +22 -1
  12. data/lib/active_merchant/billing/gateways/bogus.rb +4 -0
  13. data/lib/active_merchant/billing/gateways/borgun.rb +56 -16
  14. data/lib/active_merchant/billing/gateways/braintree_blue.rb +64 -17
  15. data/lib/active_merchant/billing/gateways/card_connect.rb +27 -9
  16. data/lib/active_merchant/billing/gateways/card_stream.rb +23 -0
  17. data/lib/active_merchant/billing/gateways/checkout_v2.rb +228 -57
  18. data/lib/active_merchant/billing/gateways/commerce_hub.rb +361 -0
  19. data/lib/active_merchant/billing/gateways/credorax.rb +47 -27
  20. data/lib/active_merchant/billing/gateways/cyber_source/cyber_source_common.rb +36 -0
  21. data/lib/active_merchant/billing/gateways/cyber_source.rb +100 -26
  22. data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +456 -0
  23. data/lib/active_merchant/billing/gateways/d_local.rb +44 -5
  24. data/lib/active_merchant/billing/gateways/decidir.rb +15 -4
  25. data/lib/active_merchant/billing/gateways/ebanx.rb +36 -24
  26. data/lib/active_merchant/billing/gateways/element.rb +21 -1
  27. data/lib/active_merchant/billing/gateways/global_collect.rb +73 -22
  28. data/lib/active_merchant/billing/gateways/ipg.rb +13 -8
  29. data/lib/active_merchant/billing/gateways/iveri.rb +39 -3
  30. data/lib/active_merchant/billing/gateways/kushki.rb +21 -1
  31. data/lib/active_merchant/billing/gateways/litle.rb +25 -5
  32. data/lib/active_merchant/billing/gateways/mastercard.rb +1 -8
  33. data/lib/active_merchant/billing/gateways/mercado_pago.rb +17 -0
  34. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +44 -10
  35. data/lib/active_merchant/billing/gateways/monei.rb +2 -0
  36. data/lib/active_merchant/billing/gateways/moneris.rb +20 -5
  37. data/lib/active_merchant/billing/gateways/mundipagg.rb +3 -0
  38. data/lib/active_merchant/billing/gateways/ogone.rb +35 -7
  39. data/lib/active_merchant/billing/gateways/openpay.rb +20 -3
  40. data/lib/active_merchant/billing/gateways/orbital.rb +43 -22
  41. data/lib/active_merchant/billing/gateways/pay_trace.rb +64 -18
  42. data/lib/active_merchant/billing/gateways/payeezy.rb +59 -4
  43. data/lib/active_merchant/billing/gateways/paymentez.rb +18 -6
  44. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  45. data/lib/active_merchant/billing/gateways/paysafe.rb +22 -14
  46. data/lib/active_merchant/billing/gateways/payu_latam.rb +3 -0
  47. data/lib/active_merchant/billing/gateways/plexo.rb +308 -0
  48. data/lib/active_merchant/billing/gateways/priority.rb +29 -6
  49. data/lib/active_merchant/billing/gateways/rapyd.rb +110 -49
  50. data/lib/active_merchant/billing/gateways/reach.rb +277 -0
  51. data/lib/active_merchant/billing/gateways/redsys.rb +9 -5
  52. data/lib/active_merchant/billing/gateways/sage_pay.rb +1 -1
  53. data/lib/active_merchant/billing/gateways/securion_pay.rb +40 -0
  54. data/lib/active_merchant/billing/gateways/shift4.rb +342 -0
  55. data/lib/active_merchant/billing/gateways/simetrik.rb +28 -22
  56. data/lib/active_merchant/billing/gateways/stripe.rb +21 -1
  57. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +62 -22
  58. data/lib/active_merchant/billing/gateways/tns.rb +2 -5
  59. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +1 -1
  60. data/lib/active_merchant/billing/gateways/trust_commerce.rb +14 -3
  61. data/lib/active_merchant/billing/gateways/vanco.rb +12 -3
  62. data/lib/active_merchant/billing/gateways/visanet_peru.rb +1 -1
  63. data/lib/active_merchant/billing/gateways/vpos.rb +7 -4
  64. data/lib/active_merchant/billing/gateways/wompi.rb +8 -4
  65. data/lib/active_merchant/billing/gateways/worldpay.rb +117 -9
  66. data/lib/active_merchant/billing/response.rb +15 -1
  67. data/lib/active_merchant/connection.rb +0 -2
  68. data/lib/active_merchant/country.rb +1 -0
  69. data/lib/active_merchant/errors.rb +4 -1
  70. data/lib/active_merchant/version.rb +1 -1
  71. metadata +24 -3
@@ -22,8 +22,8 @@ module ActiveMerchant #:nodoc:
22
22
  self.live_url = 'https://ics2wsa.ic3.com/commerce/1.x/transactionProcessor'
23
23
 
24
24
  # Schema files can be found here: https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/
25
- TEST_XSD_VERSION = '1.181'
26
- PRODUCTION_XSD_VERSION = '1.181'
25
+ TEST_XSD_VERSION = '1.201'
26
+ PRODUCTION_XSD_VERSION = '1.201'
27
27
  ECI_BRAND_MAPPING = {
28
28
  visa: 'vbv',
29
29
  master: 'spa',
@@ -65,6 +65,7 @@ module ActiveMerchant #:nodoc:
65
65
  r100: 'Successful transaction',
66
66
  r101: 'Request is missing one or more required fields',
67
67
  r102: 'One or more fields contains invalid data',
68
+ r104: 'The merchantReferenceCode sent with this authorization request matches the merchantReferenceCode of another authorization request that you sent in the last 15 minutes.', r110: 'Partial amount was approved',
68
69
  r150: 'General failure',
69
70
  r151: 'The request was received but a server time-out occurred',
70
71
  r152: 'The request was received, but a service timed out',
@@ -79,7 +80,9 @@ module ActiveMerchant #:nodoc:
79
80
  r209: 'American Express Card Identifiction Digits (CID) did not match',
80
81
  r210: 'The card has reached the credit limit',
81
82
  r211: 'Invalid card verification number',
83
+ r220: 'Generic Decline.',
82
84
  r221: "The customer matched an entry on the processor's negative file",
85
+ r222: 'customer\'s account is frozen',
83
86
  r230: 'The authorization request was approved by the issuing bank but declined by CyberSource because it did not pass the card verification check',
84
87
  r231: 'Invalid account number',
85
88
  r232: 'The card type is not accepted by the payment processor',
@@ -97,9 +100,36 @@ module ActiveMerchant #:nodoc:
97
100
  r244: 'The bank account number failed the validation check',
98
101
  r246: 'The capture or credit is not voidable because the capture or credit information has already been submitted to your processor',
99
102
  r247: 'You requested a credit for a capture that was previously voided',
103
+ r248: 'The boleto request was declined by your processor.',
100
104
  r250: 'The request was received, but a time-out occurred with the payment processor',
105
+ r251: 'The Pinless Debit card\'s use frequency or maximum amount per use has been exceeded.',
101
106
  r254: 'Your CyberSource account is prohibited from processing stand-alone refunds',
102
- r255: 'Your CyberSource account is not configured to process the service in the country you specified'
107
+ r255: 'Your CyberSource account is not configured to process the service in the country you specified',
108
+ r400: 'Soft Decline - Fraud score exceeds threshold.',
109
+ r450: 'Apartment number missing or not found.',
110
+ r451: 'Insufficient address information.',
111
+ r452: 'House/Box number not found on street.',
112
+ r453: 'Multiple address matches were found.',
113
+ r454: 'P.O. Box identifier not found or out of range.',
114
+ r455: 'Route service identifier not found or out of range.',
115
+ r456: 'Street name not found in Postal code.',
116
+ r457: 'Postal code not found in database.',
117
+ r458: 'Unable to verify or correct address.',
118
+ r459: 'Multiple addres matches were found (international)',
119
+ r460: 'Address match not found (no reason given)',
120
+ r461: 'Unsupported character set',
121
+ r475: 'The cardholder is enrolled in Payer Authentication. Please authenticate the cardholder before continuing with the transaction.',
122
+ r476: 'Encountered a Payer Authentication problem. Payer could not be authenticated.',
123
+ r478: 'Strong customer authentication (SCA) is required for this transaction.',
124
+ r480: 'The order is marked for review by Decision Manager',
125
+ r481: 'The order has been rejected by Decision Manager',
126
+ r490: 'Your aggregator or acquirer is not accepting transactions from you at this time.',
127
+ r491: 'Your aggregator or acquirer is not accepting this transaction.',
128
+ r520: 'Soft Decline - The authorization request was approved by the issuing bank but declined by CyberSource based on your Smart Authorization settings.',
129
+ r700: 'The customer matched the Denied Parties List',
130
+ r701: 'Export bill_country/ship_country match',
131
+ r702: 'Export email_country match',
132
+ r703: 'Export hostname_country/ip_country match'
103
133
  }
104
134
 
105
135
  # These are the options that can be used when creating a new CyberSource
@@ -288,15 +318,16 @@ module ActiveMerchant #:nodoc:
288
318
  add_mdd_fields(xml, options)
289
319
  add_auth_service(xml, creditcard_or_reference, options)
290
320
  add_threeds_services(xml, options)
291
- add_payment_network_token(xml) if network_tokenization?(creditcard_or_reference)
292
321
  add_business_rules_data(xml, creditcard_or_reference, options)
322
+ add_airline_data(xml, options)
323
+ add_sales_slip_number(xml, options)
324
+ add_payment_network_token(xml) if network_tokenization?(creditcard_or_reference)
325
+ add_tax_management_indicator(xml, options)
293
326
  add_stored_credential_subsequent_auth(xml, options)
294
327
  add_issuer_additional_data(xml, options)
295
328
  add_partner_solution_id(xml)
296
329
  add_stored_credential_options(xml, options)
297
330
  add_merchant_description(xml, options)
298
- add_sales_slip_number(xml, options)
299
- add_airline_data(xml, options)
300
331
  xml.target!
301
332
  end
302
333
 
@@ -317,6 +348,7 @@ module ActiveMerchant #:nodoc:
317
348
  add_purchase_data(xml, 0, false, options)
318
349
  add_tax_service(xml)
319
350
  add_business_rules_data(xml, creditcard, options)
351
+ add_tax_management_indicator(xml, options)
320
352
  xml.target!
321
353
  end
322
354
 
@@ -328,8 +360,9 @@ module ActiveMerchant #:nodoc:
328
360
  add_purchase_data(xml, money, true, options)
329
361
  add_other_tax(xml, options)
330
362
  add_mdd_fields(xml, options)
331
- add_capture_service(xml, request_id, request_token)
363
+ add_capture_service(xml, request_id, request_token, options)
332
364
  add_business_rules_data(xml, authorization, options)
365
+ add_tax_management_indicator(xml, options)
333
366
  add_issuer_additional_data(xml, options)
334
367
  add_merchant_description(xml, options)
335
368
  add_partner_solution_id(xml)
@@ -345,21 +378,27 @@ module ActiveMerchant #:nodoc:
345
378
  add_threeds_2_ucaf_data(xml, payment_method_or_reference, options)
346
379
  add_decision_manager_fields(xml, options)
347
380
  add_mdd_fields(xml, options)
348
- add_sales_slip_number(xml, options)
349
- add_airline_data(xml, options)
350
- if !payment_method_or_reference.is_a?(String) && card_brand(payment_method_or_reference) == 'check'
381
+ if (!payment_method_or_reference.is_a?(String) && card_brand(payment_method_or_reference) == 'check') || reference_is_a_check?(payment_method_or_reference)
351
382
  add_check_service(xml)
383
+ add_airline_data(xml, options)
384
+ add_sales_slip_number(xml, options)
385
+ add_tax_management_indicator(xml, options)
352
386
  add_issuer_additional_data(xml, options)
353
387
  add_partner_solution_id(xml)
388
+ options[:payment_method] = :check
354
389
  else
355
390
  add_purchase_service(xml, payment_method_or_reference, options)
356
391
  add_threeds_services(xml, options)
357
- add_payment_network_token(xml) if network_tokenization?(payment_method_or_reference)
358
392
  add_business_rules_data(xml, payment_method_or_reference, options)
393
+ add_airline_data(xml, options)
394
+ add_sales_slip_number(xml, options)
395
+ add_payment_network_token(xml) if network_tokenization?(payment_method_or_reference)
396
+ add_tax_management_indicator(xml, options)
359
397
  add_stored_credential_subsequent_auth(xml, options)
360
398
  add_issuer_additional_data(xml, options)
361
399
  add_partner_solution_id(xml)
362
400
  add_stored_credential_options(xml, options)
401
+ options[:payment_method] = :credit_card
363
402
  end
364
403
 
365
404
  add_merchant_description(xml, options)
@@ -367,6 +406,10 @@ module ActiveMerchant #:nodoc:
367
406
  xml.target!
368
407
  end
369
408
 
409
+ def reference_is_a_check?(payment_method_or_reference)
410
+ payment_method_or_reference.is_a?(String) && payment_method_or_reference.split(';')[7] == 'check'
411
+ end
412
+
370
413
  def build_void_request(identification, options)
371
414
  order_id, request_id, request_token, action, money, currency = identification.split(';')
372
415
  options[:order_id] = order_id
@@ -393,7 +436,9 @@ module ActiveMerchant #:nodoc:
393
436
 
394
437
  xml = Builder::XmlMarkup.new indent: 2
395
438
  add_purchase_data(xml, money, true, options)
396
- add_credit_service(xml, request_id, request_token)
439
+ add_credit_service(xml, request_id: request_id,
440
+ request_token: request_token,
441
+ use_check_service: reference_is_a_check?(identification))
397
442
  add_partner_solution_id(xml)
398
443
 
399
444
  xml.target!
@@ -404,7 +449,7 @@ module ActiveMerchant #:nodoc:
404
449
 
405
450
  add_payment_method_or_subscription(xml, money, creditcard_or_reference, options)
406
451
  add_mdd_fields(xml, options)
407
- add_credit_service(xml)
452
+ add_credit_service(xml, use_check_service: creditcard_or_reference.is_a?(Check))
408
453
  add_issuer_additional_data(xml, options)
409
454
  add_merchant_description(xml, options)
410
455
 
@@ -421,11 +466,13 @@ module ActiveMerchant #:nodoc:
421
466
  add_address(xml, payment_method, options[:billing_address], options)
422
467
  add_purchase_data(xml, options[:setup_fee] || 0, true, options)
423
468
  if card_brand(payment_method) == 'check'
424
- add_check(xml, payment_method)
469
+ add_check(xml, payment_method, options)
425
470
  add_check_payment_method(xml)
471
+ options[:payment_method] = :check
426
472
  else
427
473
  add_creditcard(xml, payment_method)
428
474
  add_creditcard_payment_method(xml)
475
+ options[:payment_method] = :credit_card
429
476
  end
430
477
  add_subscription(xml, options)
431
478
  if options[:setup_fee]
@@ -438,6 +485,7 @@ module ActiveMerchant #:nodoc:
438
485
  end
439
486
  add_subscription_create_service(xml, options)
440
487
  add_business_rules_data(xml, payment_method, options)
488
+ add_tax_management_indicator(xml, options)
441
489
  xml.target!
442
490
  end
443
491
 
@@ -450,6 +498,7 @@ module ActiveMerchant #:nodoc:
450
498
  add_subscription(xml, options, reference)
451
499
  add_subscription_update_service(xml, options)
452
500
  add_business_rules_data(xml, creditcard, options)
501
+ add_tax_management_indicator(xml, options)
453
502
  xml.target!
454
503
  end
455
504
 
@@ -512,12 +561,14 @@ module ActiveMerchant #:nodoc:
512
561
  end
513
562
 
514
563
  def add_merchant_descriptor(xml, options)
515
- return unless options[:merchant_descriptor] || options[:user_po] || options[:taxable]
564
+ return unless options[:merchant_descriptor] || options[:user_po] || options[:taxable] || options[:reference_data_code] || options[:invoice_number]
516
565
 
517
566
  xml.tag! 'invoiceHeader' do
518
567
  xml.tag! 'merchantDescriptor', options[:merchant_descriptor] if options[:merchant_descriptor]
519
568
  xml.tag! 'userPO', options[:user_po] if options[:user_po]
520
569
  xml.tag! 'taxable', options[:taxable] if options[:taxable]
570
+ xml.tag! 'referenceDataCode', options[:reference_data_code] if options[:reference_data_code]
571
+ xml.tag! 'invoiceNumber', options[:invoice_number] if options[:invoice_number]
521
572
  end
522
573
  end
523
574
 
@@ -551,10 +602,20 @@ module ActiveMerchant #:nodoc:
551
602
  end
552
603
  end
553
604
 
605
+ def add_tax_management_indicator(xml, options)
606
+ return unless options[:tax_management_indicator]
607
+
608
+ xml.tag! 'taxManagementIndicator', options[:tax_management_indicator] if options[:tax_management_indicator]
609
+ end
610
+
554
611
  def add_purchase_data(xml, money = 0, include_grand_total = false, options = {})
555
612
  xml.tag! 'purchaseTotals' do
556
613
  xml.tag! 'currency', options[:currency] || currency(money)
614
+ xml.tag!('discountManagementIndicator', options[:discount_management_indicator]) if options[:discount_management_indicator]
615
+ xml.tag!('taxAmount', options[:purchase_tax_amount]) if options[:purchase_tax_amount]
557
616
  xml.tag!('grandTotalAmount', localized_amount(money.to_i, options[:currency] || default_currency)) if include_grand_total
617
+ xml.tag!('originalAmount', options[:original_amount]) if options[:original_amount]
618
+ xml.tag!('invoiceAmount', options[:invoice_amount]) if options[:invoice_amount]
558
619
  end
559
620
  end
560
621
 
@@ -623,6 +684,7 @@ module ActiveMerchant #:nodoc:
623
684
  return unless options[:local_tax_amount] || options[:national_tax_amount] || options[:national_tax_indicator]
624
685
 
625
686
  xml.tag! 'otherTax' do
687
+ xml.tag! 'vatTaxRate', options[:vat_tax_rate] if options[:vat_tax_rate]
626
688
  xml.tag! 'localTaxAmount', options[:local_tax_amount] if options[:local_tax_amount]
627
689
  xml.tag! 'nationalTaxAmount', options[:national_tax_amount] if options[:national_tax_amount]
628
690
  xml.tag! 'nationalTaxIndicator', options[:national_tax_indicator] if options[:national_tax_indicator]
@@ -640,11 +702,12 @@ module ActiveMerchant #:nodoc:
640
702
  end
641
703
  end
642
704
 
643
- def add_check(xml, check)
705
+ def add_check(xml, check, options)
644
706
  xml.tag! 'check' do
645
707
  xml.tag! 'accountNumber', check.account_number
646
708
  xml.tag! 'accountType', check.account_type[0]
647
709
  xml.tag! 'bankTransitNumber', check.routing_number
710
+ xml.tag! 'secCode', options[:sec_code] if options[:sec_code]
648
711
  end
649
712
  end
650
713
 
@@ -667,6 +730,7 @@ module ActiveMerchant #:nodoc:
667
730
  xml.tag!('commerceIndicator', indicator) if indicator
668
731
  end
669
732
  xml.tag!('reconciliationID', options[:reconciliation_id]) if options[:reconciliation_id]
733
+ xml.tag!('mobileRemotePaymentType', options[:mobile_remote_payment_type]) if options[:mobile_remote_payment_type]
670
734
  end
671
735
  end
672
736
  end
@@ -759,9 +823,11 @@ module ActiveMerchant #:nodoc:
759
823
  xml.tag! 'ccAuthService', { 'run' => 'true' } do
760
824
  xml.tag!('cavv', Base64.encode64(cryptogram[0...20]))
761
825
  xml.tag!('commerceIndicator', ECI_BRAND_MAPPING[brand])
762
- xml.tag!('xid', Base64.encode64(cryptogram[20...40]))
826
+ xml.tag!('xid', Base64.encode64(cryptogram[20...40])) if cryptogram.bytes.count > 20
763
827
  xml.tag!('reconciliationID', options[:reconciliation_id]) if options[:reconciliation_id]
764
828
  end
829
+ else
830
+ raise ArgumentError.new("Payment method #{brand} is not supported, check https://developer.cybersource.com/docs/cybs/en-us/payments/developer/all/rest/payments/CreatingOnlineAuth/CreatingAuthReqPNT.html")
765
831
  end
766
832
  end
767
833
 
@@ -771,10 +837,11 @@ module ActiveMerchant #:nodoc:
771
837
  end
772
838
  end
773
839
 
774
- def add_capture_service(xml, request_id, request_token)
840
+ def add_capture_service(xml, request_id, request_token, options)
775
841
  xml.tag! 'ccCaptureService', { 'run' => 'true' } do
776
842
  xml.tag! 'authRequestID', request_id
777
843
  xml.tag! 'authRequestToken', request_token
844
+ xml.tag! 'gratuityAmount', options[:gratuity_amount] if options[:gratuity_amount]
778
845
  xml.tag! 'reconciliationID', options[:reconciliation_id] if options[:reconciliation_id]
779
846
  end
780
847
  end
@@ -800,10 +867,14 @@ module ActiveMerchant #:nodoc:
800
867
  end
801
868
  end
802
869
 
803
- def add_credit_service(xml, request_id = nil, request_token = nil)
804
- xml.tag! 'ccCreditService', { 'run' => 'true' } do
805
- xml.tag! 'captureRequestID', request_id if request_id
806
- xml.tag! 'captureRequestToken', request_token if request_token
870
+ def add_credit_service(xml, options = {})
871
+ service = options[:use_check_service] ? 'ecCreditService' : 'ccCreditService'
872
+ request_tag = options[:use_check_service] ? 'debitRequestID' : 'captureRequestID'
873
+ options.delete :request_token if options[:use_check_service]
874
+
875
+ xml.tag! service, { 'run' => 'true' } do
876
+ xml.tag! request_tag, options[:request_id] if options[:request_id]
877
+ xml.tag! 'captureRequestToken', options[:request_token] if options[:request_token]
807
878
  end
808
879
  end
809
880
 
@@ -870,7 +941,7 @@ module ActiveMerchant #:nodoc:
870
941
  add_address(xml, payment_method_or_reference, options[:billing_address], options)
871
942
  add_purchase_data(xml, money, true, options)
872
943
  add_installments(xml, options)
873
- add_check(xml, payment_method_or_reference)
944
+ add_check(xml, payment_method_or_reference, options)
874
945
  else
875
946
  add_address(xml, payment_method_or_reference, options[:billing_address], options)
876
947
  add_address(xml, payment_method_or_reference, options[:shipping_address], options, true)
@@ -882,12 +953,15 @@ module ActiveMerchant #:nodoc:
882
953
  end
883
954
 
884
955
  def add_installments(xml, options)
885
- return unless options[:installment_total_count]
956
+ return unless %i[installment_total_count installment_total_amount installment_plan_type first_installment_date installment_annual_interest_rate installment_grace_period_duration].any? { |gsf| options.include?(gsf) }
886
957
 
887
958
  xml.tag! 'installment' do
888
- xml.tag! 'totalCount', options[:installment_total_count]
959
+ xml.tag!('totalCount', options[:installment_total_count]) if options[:installment_total_count]
960
+ xml.tag!('totalAmount', options[:installment_total_amount]) if options[:installment_total_amount]
889
961
  xml.tag!('planType', options[:installment_plan_type]) if options[:installment_plan_type]
890
962
  xml.tag!('firstInstallmentDate', options[:first_installment_date]) if options[:first_installment_date]
963
+ xml.tag!('annualInterestRate', options[:installment_annual_interest_rate]) if options[:installment_annual_interest_rate]
964
+ xml.tag!('gracePeriodDuration', options[:installment_grace_period_duration]) if options[:installment_grace_period_duration]
891
965
  end
892
966
  end
893
967
 
@@ -1033,7 +1107,7 @@ module ActiveMerchant #:nodoc:
1033
1107
 
1034
1108
  def authorization_from(response, action, amount, options)
1035
1109
  [options[:order_id], response[:requestID], response[:requestToken], action, amount,
1036
- options[:currency], response[:subscriptionID]].join(';')
1110
+ options[:currency], response[:subscriptionID], options[:payment_method]].join(';')
1037
1111
  end
1038
1112
 
1039
1113
  def in_fraud_review?(response)