activemerchant 1.126.0 → 1.129.0

Sign up to get free protection for your applications and to get access to all the features.
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)