braintree 3.4.0 → 4.3.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/braintree.gemspec +2 -2
  3. data/lib/braintree.rb +4 -0
  4. data/lib/braintree/address.rb +1 -0
  5. data/lib/braintree/apple_pay_card.rb +9 -0
  6. data/lib/braintree/credit_card_gateway.rb +11 -1
  7. data/lib/braintree/customer.rb +4 -2
  8. data/lib/braintree/customer_gateway.rb +2 -0
  9. data/lib/braintree/dispute.rb +14 -0
  10. data/lib/braintree/dispute/paypal_message.rb +15 -0
  11. data/lib/braintree/dispute_search.rb +1 -0
  12. data/lib/braintree/error_codes.rb +4 -6
  13. data/lib/braintree/google_pay_card.rb +9 -0
  14. data/lib/braintree/payment_method_gateway.rb +7 -4
  15. data/lib/braintree/payment_method_nonce.rb +7 -4
  16. data/lib/braintree/payment_method_nonce_details.rb +37 -0
  17. data/lib/braintree/payment_method_nonce_details_payer_info.rb +32 -0
  18. data/lib/braintree/transaction/paypal_details.rb +2 -0
  19. data/lib/braintree/transaction_gateway.rb +3 -3
  20. data/lib/braintree/version.rb +2 -2
  21. data/lib/braintree/webhook_notification.rb +2 -1
  22. data/lib/braintree/webhook_testing_gateway.rb +20 -0
  23. data/lib/braintree/xml/libxml.rb +0 -1
  24. data/lib/braintree/xml/parser.rb +12 -2
  25. data/lib/braintree/xml/rexml.rb +70 -0
  26. data/spec/integration/braintree/address_spec.rb +4 -0
  27. data/spec/integration/braintree/credit_card_spec.rb +89 -0
  28. data/spec/integration/braintree/customer_spec.rb +144 -0
  29. data/spec/integration/braintree/dispute_search_spec.rb +25 -0
  30. data/spec/integration/braintree/merchant_account_spec.rb +3 -3
  31. data/spec/integration/braintree/payment_method_nonce_spec.rb +16 -23
  32. data/spec/integration/braintree/payment_method_spec.rb +131 -0
  33. data/spec/integration/braintree/transaction_spec.rb +82 -2
  34. data/spec/spec_helper.rb +2 -0
  35. data/spec/unit/braintree/credit_card_spec.rb +6 -6
  36. data/spec/unit/braintree/customer_spec.rb +17 -7
  37. data/spec/unit/braintree/dispute_search_spec.rb +1 -0
  38. data/spec/unit/braintree/dispute_spec.rb +26 -1
  39. data/spec/unit/braintree/payment_method_nonce_details_payer_info_spec.rb +31 -0
  40. data/spec/unit/braintree/payment_method_nonce_details_spec.rb +43 -0
  41. data/spec/unit/braintree/payment_method_nonce_spec.rb +40 -0
  42. data/spec/unit/braintree/transaction/paypal_details_spec.rb +4 -0
  43. data/spec/unit/braintree/transaction_spec.rb +3 -3
  44. data/spec/unit/braintree/webhook_notification_spec.rb +16 -0
  45. data/spec/unit/braintree/xml/rexml_spec.rb +51 -0
  46. metadata +15 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85d22ee560b343f4bbd3f71272f4e9d5cfaa83672ddc36fceb9fc383b25772e3
4
- data.tar.gz: 8d29ee6fcd9b7f6ccbab6680029b66c70e53867448b369af806feb454cfdb18c
3
+ metadata.gz: 47a154939f137c75bb981bb87bc53531502190ebd6dc8541e6df267c4692f520
4
+ data.tar.gz: 8acb4e0255f8b0ae61bcf7749f05b93bb4f09aa451fb5f1951d7605ce2b1f6b5
5
5
  SHA512:
6
- metadata.gz: d35fdc8ebf0d555649b08e401b4b16f6ac58ee52ca3fdb6a0ce899b10a4c7b2db94873fdb940649941c105cf9ca44686a415a9760619be4e7f5d7d9b33883e81
7
- data.tar.gz: 687c698cd56953bc23694112256bfe422b53e0a0f0697e5c6626567933ecaab332a1fc6732f4085747ef68178a1d76d6f76a372ec070feb365c8557db8301f51
6
+ metadata.gz: a00d9aa6efeaf3e218f01470941c218fbcd3f3551f8259af0b2e4acdb55349c9c17ac36fd4e4163216e3569e2fbf6b3e247ba49ecdfea853dc63b9387b921ff9
7
+ data.tar.gz: 85d512a9b6b445d7a0e17c48b020a9ccbf1491f067ab7d845f7bc554bb9597aea1cd62d965396b86b9f45f06fd2c5707acbb17a848b699ca7500772bcff97656
data/braintree.gemspec CHANGED
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
12
12
  s.homepage = "https://www.braintreepayments.com/"
13
13
  s.files = Dir.glob ["README.rdoc", "LICENSE", "lib/**/*.{rb,crt}", "spec/**/*", "*.gemspec"]
14
14
  s.add_dependency "builder", ">= 3.2.4"
15
- s.add_dependency "libxml-ruby", ">= 3.2.0"
16
- s.required_ruby_version = ">=2.5.0"
15
+ s.add_dependency "rexml", ">= 3.1.9" # Use rexml version associated with minimum supported Ruby version
16
+ s.required_ruby_version = ">=2.6.0"
17
17
  s.metadata = {
18
18
  "bug_tracker_uri" => "https://github.com/braintree/braintree_ruby/issues",
19
19
  "changelog_uri" => "https://github.com/braintree/braintree_ruby/blob/master/CHANGELOG.md",
data/lib/braintree.rb CHANGED
@@ -59,6 +59,7 @@ require "braintree/discount_gateway"
59
59
  require "braintree/dispute"
60
60
  require "braintree/dispute_gateway"
61
61
  require "braintree/dispute/evidence"
62
+ require "braintree/dispute/paypal_message"
62
63
  require "braintree/dispute/status_history"
63
64
  require "braintree/dispute/transaction"
64
65
  require "braintree/dispute/transaction_details"
@@ -87,6 +88,8 @@ require "braintree/payment_instrument_type"
87
88
  require "braintree/payment_method"
88
89
  require "braintree/payment_method_gateway"
89
90
  require "braintree/payment_method_nonce"
91
+ require "braintree/payment_method_nonce_details"
92
+ require "braintree/payment_method_nonce_details_payer_info"
90
93
  require "braintree/payment_method_nonce_gateway"
91
94
  require "braintree/payment_method_parser"
92
95
  require "braintree/paypal_account"
@@ -160,4 +163,5 @@ require "braintree/webhook_testing_gateway"
160
163
  require "braintree/xml"
161
164
  require "braintree/xml/generator"
162
165
  require "braintree/xml/libxml"
166
+ require "braintree/xml/rexml"
163
167
  require "braintree/xml/parser"
@@ -14,6 +14,7 @@ module Braintree
14
14
  attr_reader :id
15
15
  attr_reader :last_name
16
16
  attr_reader :locality
17
+ attr_reader :phone_number
17
18
  attr_reader :postal_code
18
19
  attr_reader :region
19
20
  attr_reader :street_address
@@ -12,15 +12,24 @@ module Braintree
12
12
 
13
13
  attr_reader :bin
14
14
  attr_reader :card_type
15
+ attr_reader :commercial
16
+ attr_reader :country_of_issuance
15
17
  attr_reader :created_at
16
18
  attr_reader :customer_id
19
+ attr_reader :debit
17
20
  attr_reader :default
21
+ attr_reader :durbin_regulated
18
22
  attr_reader :expiration_month
19
23
  attr_reader :expiration_year
20
24
  attr_reader :expired
25
+ attr_reader :healthcare
21
26
  attr_reader :image_url
27
+ attr_reader :issuing_bank
22
28
  attr_reader :last_4
23
29
  attr_reader :payment_instrument_name
30
+ attr_reader :payroll
31
+ attr_reader :prepaid
32
+ attr_reader :product_id
24
33
  attr_reader :source_description
25
34
  attr_reader :subscriptions
26
35
  attr_reader :token
@@ -79,7 +79,17 @@ module Braintree
79
79
 
80
80
  def self._signature(type) # :nodoc:
81
81
  billing_address_params = AddressGateway._shared_signature
82
- options = [:make_default, :verification_merchant_account_id, :verify_card, :verification_amount, :venmo_sdk_session, :fail_on_duplicate_payment_method, :verification_account_type,:verification_currency_iso_code]
82
+ options = [
83
+ :fail_on_duplicate_payment_method,
84
+ :make_default,
85
+ :skip_advanced_fraud_checking,
86
+ :venmo_sdk_session,
87
+ :verification_account_type,
88
+ :verification_amount,
89
+ :verification_currency_iso_code,
90
+ :verification_merchant_account_id,
91
+ :verify_card
92
+ ]
83
93
  signature = [
84
94
  :billing_address_id, :cardholder_name, :cvv, :expiration_date, :expiration_month,
85
95
  :expiration_year, :number, :token, :venmo_sdk_payment_method_code, :device_data,
@@ -19,6 +19,7 @@ module Braintree
19
19
  attr_reader :paypal_accounts
20
20
  attr_reader :phone
21
21
  attr_reader :samsung_pay_cards
22
+ attr_reader :tax_identifiers
22
23
  attr_reader :updated_at
23
24
  attr_reader :us_bank_accounts
24
25
  attr_reader :venmo_accounts
@@ -90,6 +91,7 @@ module Braintree
90
91
  @visa_checkout_cards = (@visa_checkout_cards|| []).map { |pm| VisaCheckoutCard._new gateway, pm }
91
92
  @samsung_pay_cards = (@samsung_pay_cards|| []).map { |pm| SamsungPayCard._new gateway, pm }
92
93
  @addresses = (@addresses || []).map { |addr| Address._new gateway, addr }
94
+ @tax_identifiers = (@tax_identifiers || []).map { |addr| TaxIdentifier._new gateway, addr }
93
95
  @custom_fields = attributes[:custom_fields].is_a?(Hash) ? attributes[:custom_fields] : {}
94
96
  end
95
97
 
@@ -124,7 +126,7 @@ module Braintree
124
126
 
125
127
  def inspect # :nodoc:
126
128
  first = [:id]
127
- last = [:addresses, :credit_cards, :paypal_accounts]
129
+ last = [:addresses, :credit_cards, :paypal_accounts, :tax_identifiers]
128
130
  order = first + (self.class._attributes - first - last) + last
129
131
  nice_attributes = order.map do |attr|
130
132
  "#{attr}: #{send(attr).inspect}"
@@ -148,7 +150,7 @@ module Braintree
148
150
  def self._attributes # :nodoc:
149
151
  [
150
152
  :addresses, :company, :credit_cards, :email, :fax, :first_name, :id, :last_name, :phone, :website,
151
- :created_at, :updated_at
153
+ :created_at, :updated_at, :tax_identifiers
152
154
  ]
153
155
  end
154
156
 
@@ -80,6 +80,7 @@ module Braintree
80
80
  {:risk_data => [:customer_browser, :customer_ip]},
81
81
  {:credit_card => credit_card_signature},
82
82
  {:paypal_account => paypal_account_signature},
83
+ {:tax_identifiers => [:country_code, :identifier]},
83
84
  {:options => options},
84
85
  {:custom_fields => :_any_key_}
85
86
  ]
@@ -141,6 +142,7 @@ module Braintree
141
142
  :company, :email, :fax, :first_name, :id, :last_name, :phone, :website,
142
143
  :device_data, :payment_method_nonce, :default_payment_method_token,
143
144
  {:credit_card => credit_card_signature},
145
+ {:tax_identifiers => [:country_code, :identifier]},
144
146
  {:options => options},
145
147
  {:custom_fields => :_any_key_}
146
148
  ]
@@ -7,6 +7,7 @@ module Braintree
7
7
  attr_reader :amount_disputed
8
8
  attr_reader :amount_won
9
9
  attr_reader :case_number
10
+ attr_reader :chargeback_protection_level
10
11
  attr_reader :created_at
11
12
  attr_reader :currency_iso_code
12
13
  attr_reader :date_opened
@@ -17,6 +18,7 @@ module Braintree
17
18
  attr_reader :kind
18
19
  attr_reader :merchant_account_id
19
20
  attr_reader :original_dispute_id
21
+ attr_reader :paypal_messages
20
22
  attr_reader :processor_comments
21
23
  attr_reader :reason
22
24
  attr_reader :reason_code
@@ -65,6 +67,14 @@ module Braintree
65
67
  All = constants.map { |c| const_get(c) }
66
68
  end
67
69
 
70
+ module ChargebackProtectionLevel
71
+ Effortless = "effortless"
72
+ Standard = "standard"
73
+ NotProtected = "not_protected"
74
+
75
+ All = constants.map { |c| const_get(c) }
76
+ end
77
+
68
78
  class << self
69
79
  protected :new
70
80
  def _new(*args) # :nodoc:
@@ -114,6 +124,10 @@ module Braintree
114
124
  Braintree::Dispute::Evidence.new(record)
115
125
  end unless evidence.nil?
116
126
 
127
+ @paypal_messages = paypal_messages.map do |record|
128
+ Braintree::Dispute::PayPalMessage.new(record)
129
+ end unless paypal_messages.nil?
130
+
117
131
  @transaction_details = TransactionDetails.new(transaction)
118
132
  @transaction = Transaction.new(transaction)
119
133
 
@@ -0,0 +1,15 @@
1
+ module Braintree
2
+ class Dispute
3
+ class PayPalMessage # :nodoc:
4
+ include BaseModule
5
+
6
+ attr_reader :message,
7
+ :sender,
8
+ :sent_at
9
+
10
+ def initialize(attributes)
11
+ set_instance_variables_from_hash attributes unless attributes.nil?
12
+ end
13
+ end
14
+ end
15
+ end
@@ -8,6 +8,7 @@ module Braintree
8
8
  :transaction_id,
9
9
  )
10
10
 
11
+ multiple_value_field :chargeback_protection_level, :allows => Dispute::ChargebackProtectionLevel::All
11
12
  multiple_value_field :kind, :allows => Dispute::Kind::All
12
13
  multiple_value_field :merchant_account_id
13
14
  multiple_value_field :reason, :allows => Dispute::Reason::All
@@ -312,6 +312,7 @@ module Braintree
312
312
  DiscountAmountCannotBeNegative = "915160"
313
313
  DiscountAmountFormatIsInvalid = "915159"
314
314
  DiscountAmountIsTooLarge = "915161"
315
+ ExchangeRateQuoteIdTooLong = "915229"
315
316
  FailedAuthAdjustmentAllowRetry = "95603"
316
317
  FailedAuthAdjustmentHardDecline = "95602"
317
318
  FinalAuthSubmitForSettlementForDifferentAmount = "95601"
@@ -385,6 +386,7 @@ module Braintree
385
386
  SubscriptionStatusMustBePastDue = "91531"
386
387
  TaxAmountCannotBeNegative = "81534"
387
388
  TaxAmountFormatIsInvalid = "81535"
389
+ TaxAmountIsRequiredForAibSwedish = "815224"
388
390
  TaxAmountIsTooLarge = "81536"
389
391
  ThreeDSecureAuthenticationFailed = "81571"
390
392
  ThreeDSecureAuthenticationIdDoesntMatchNonceThreeDSecureAuthentication = "915198"
@@ -517,8 +519,6 @@ module Braintree
517
519
  end
518
520
 
519
521
  module ExternalVault
520
- # NEXT_MAJOR_VERSION remove this validation error as it is no longer returned by the gateway
521
- CardTypeIsInvalid = "915178"
522
522
  PreviousNetworkTransactionIdIsInvalid = "915179"
523
523
  StatusIsInvalid = "915175"
524
524
  StatusWithPreviousNetworkTransactionIdIsInvalid = "915177"
@@ -705,13 +705,13 @@ module Braintree
705
705
  end
706
706
 
707
707
  module PaymentMethod
708
- CannotForwardPaymentMethodType = "93107"
708
+ CannotForwardPaymentMethodType = "93106"
709
709
  CustomerIdIsInvalid = "93105"
710
710
  CustomerIdIsRequired = "93104"
711
711
  NonceIsInvalid = "93102"
712
712
  NonceIsRequired = "93103"
713
713
  PaymentMethodNoLongerSupported = "93117"
714
- PaymentMethodNonceConsumed = "93106"
714
+ PaymentMethodNonceConsumed = "93107"
715
715
  PaymentMethodNonceLocked = "93109"
716
716
  PaymentMethodNonceUnknown = "93108"
717
717
  PaymentMethodParamsAreRequired = "93101"
@@ -786,8 +786,6 @@ module Braintree
786
786
  end
787
787
 
788
788
  module RiskData
789
- # NEXT_MAJOR_VERSION Remove CustomerBrowserIsTooLong (this validation is no longer applied)
790
- CustomerBrowserIsTooLong = "94701"
791
789
  CustomerDeviceIdIsTooLong = "94702"
792
790
  CustomerLocationZipInvalidCharacters = "94703"
793
791
  CustomerLocationZipIsInvalid = "94704"
@@ -3,13 +3,22 @@ module Braintree
3
3
  include BaseModule # :nodoc:
4
4
 
5
5
  attr_reader :bin
6
+ attr_reader :commercial
7
+ attr_reader :country_of_issuance
6
8
  attr_reader :created_at
7
9
  attr_reader :customer_id
10
+ attr_reader :debit
8
11
  attr_reader :default
12
+ attr_reader :durbin_regulated
9
13
  attr_reader :expiration_month
10
14
  attr_reader :expiration_year
11
15
  attr_reader :google_transaction_id
16
+ attr_reader :healthcare
12
17
  attr_reader :image_url
18
+ attr_reader :issuing_bank
19
+ attr_reader :payroll
20
+ attr_reader :prepaid
21
+ attr_reader :product_id
13
22
  attr_reader :source_card_last_4
14
23
  attr_reader :source_card_type
15
24
  attr_reader :source_description
@@ -148,10 +148,15 @@ module Braintree
148
148
  billing_address_params = AddressGateway._shared_signature
149
149
  paypal_options_shipping_signature = AddressGateway._shared_signature
150
150
  options = [
151
- :make_default, :verification_merchant_account_id, :verify_card, :venmo_sdk_session,
152
- :verification_amount, :us_bank_account_verification_method,
151
+ :make_default,
152
+ :skip_advanced_fraud_checking,
153
+ :us_bank_account_verification_method,
154
+ :venmo_sdk_session,
153
155
  :verification_account_type,
156
+ :verification_amount,
154
157
  :verification_currency_iso_code,
158
+ :verification_merchant_account_id,
159
+ :verify_card,
155
160
  :paypal => [
156
161
  :payee_email,
157
162
  :order_id,
@@ -186,8 +191,6 @@ module Braintree
186
191
  options << :fail_on_duplicate_payment_method
187
192
  signature << :customer_id
188
193
  signature << :paypal_refresh_token
189
- # NEXT_MAJOR_VERSION remove this from the signature
190
- signature << :paypal_vault_without_upgrade
191
194
  when :update
192
195
  billing_address_params << {:options => [:update_existing]}
193
196
  else
@@ -15,6 +15,7 @@ module Braintree
15
15
  end
16
16
 
17
17
  attr_reader :bin_data
18
+ attr_reader :default
18
19
  attr_reader :details
19
20
  attr_reader :nonce
20
21
  attr_reader :three_d_secure_info
@@ -23,14 +24,16 @@ module Braintree
23
24
 
24
25
  def initialize(gateway, attributes) # :nodoc:
25
26
  @gateway = gateway
26
- @nonce = attributes.fetch(:nonce)
27
- @type = attributes.fetch(:type)
28
- @details = attributes.fetch(:details)
29
- @authentication_insight = attributes.fetch(:authentication_insight, nil)
27
+ set_instance_variables_from_hash(attributes)
28
+ @details = PaymentMethodNonceDetails.new(attributes[:details]) if attributes[:details]
30
29
  @three_d_secure_info = ThreeDSecureInfo.new(attributes[:three_d_secure_info]) if attributes[:three_d_secure_info]
31
30
  @bin_data = BinData.new(attributes[:bin_data]) if attributes[:bin_data]
32
31
  end
33
32
 
33
+ def default?
34
+ @default
35
+ end
36
+
34
37
  def to_s # :nodoc:
35
38
  nonce
36
39
  end
@@ -0,0 +1,37 @@
1
+ module Braintree
2
+ class PaymentMethodNonceDetails # :nodoc:
3
+ include BaseModule
4
+
5
+ attr_reader :bin
6
+ attr_reader :card_type
7
+ attr_reader :expiration_month
8
+ attr_reader :expiration_year
9
+ attr_reader :is_network_tokenized
10
+ attr_reader :last_two
11
+ attr_reader :payer_info
12
+
13
+ alias_method :is_network_tokenized?, :is_network_tokenized
14
+
15
+ def initialize(attributes)
16
+ set_instance_variables_from_hash attributes unless attributes.nil?
17
+ @payer_info = PaymentMethodNonceDetailsPayerInfo.new(attributes[:payer_info]) if attributes[:payer_info]
18
+ end
19
+
20
+ def inspect
21
+ attr_order = [
22
+ :bin,
23
+ :card_type,
24
+ :expiration_month,
25
+ :expiration_year,
26
+ :is_network_tokenized,
27
+ :last_two,
28
+ :payer_info,
29
+ ]
30
+
31
+ formatted_attrs = attr_order.map do |attr|
32
+ "#{attr}: #{send(attr).inspect}"
33
+ end
34
+ "#<PaymentMethodNonceDetails #{formatted_attrs.join(", ")}>"
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ module Braintree
2
+ class PaymentMethodNonceDetailsPayerInfo # :nodoc:
3
+ include BaseModule
4
+
5
+ attr_reader :billing_agreement_id
6
+ attr_reader :country_code
7
+ attr_reader :email
8
+ attr_reader :first_name
9
+ attr_reader :last_name
10
+ attr_reader :payer_id
11
+
12
+ def initialize(attributes)
13
+ set_instance_variables_from_hash attributes unless attributes.nil?
14
+ end
15
+
16
+ def inspect
17
+ attr_order = [
18
+ :billing_agreement_id,
19
+ :country_code,
20
+ :email,
21
+ :first_name,
22
+ :last_name,
23
+ :payer_id,
24
+ ]
25
+
26
+ formatted_attrs = attr_order.map do |attr|
27
+ "#{attr}: #{send(attr).inspect}"
28
+ end
29
+ "#<PaymentMethodNonceDetailsPayerInfo #{formatted_attrs.join(", ")}>"
30
+ end
31
+ end
32
+ end
@@ -24,6 +24,8 @@ module Braintree
24
24
  attr_reader :refund_from_transaction_fee_currency_iso_code
25
25
  attr_reader :refund_id
26
26
  attr_reader :seller_protection_status
27
+ attr_reader :tax_id
28
+ attr_reader :tax_id_type
27
29
  attr_reader :token
28
30
  attr_reader :transaction_fee_amount
29
31
  attr_reader :transaction_fee_currency_iso_code
@@ -61,7 +61,7 @@ module Braintree
61
61
  end
62
62
 
63
63
  def find(id)
64
- raise ArgumentError if id.nil? || id.strip.to_s == ""
64
+ raise ArgumentError, "id can not be empty" if id.nil? || id.strip.to_s == ""
65
65
  response = @config.http.get("#{@config.base_merchant_path}/transactions/#{id}")
66
66
  Transaction._new(@gateway, response[:transaction])
67
67
  rescue NotFoundError
@@ -192,10 +192,10 @@ module Braintree
192
192
  :shared_shipping_address_id, :shipping_address_id, :shipping_amount,
193
193
  :ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,
194
194
  :three_d_secure_token, :transaction_source, :type, :venmo_sdk_payment_method_code,
195
- :sca_exemption, :currency_iso_code,
195
+ :sca_exemption, :currency_iso_code, :exchange_rate_quote_id,
196
196
  {:line_items => [:quantity, :name, :description, :kind, :unit_amount, :unit_tax_amount, :total_amount, :discount_amount, :tax_amount, :unit_of_measure, :product_code, :commodity_code, :url]},
197
197
  {:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
198
- {:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number]},
198
+ {:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}]},
199
199
  {:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
200
200
  {
201
201
  :billing => AddressGateway._shared_signature