braintree 4.5.0 → 4.8.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.
- checksums.yaml +4 -4
- data/braintree.gemspec +1 -1
- data/lib/braintree/enriched_customer_data.rb +21 -0
- data/lib/braintree/exchange_rate.rb +13 -0
- data/lib/braintree/exchange_rate_quote.rb +24 -0
- data/lib/braintree/exchange_rate_quote_gateway.rb +35 -0
- data/lib/braintree/exchange_rate_quote_input.rb +21 -0
- data/lib/braintree/exchange_rate_quote_request.rb +18 -0
- data/lib/braintree/exchange_rate_quote_response.rb +18 -0
- data/lib/braintree/gateway.rb +4 -0
- data/lib/braintree/payment_method_customer_data_updated_metadata.rb +24 -0
- data/lib/braintree/plan_gateway.rb +3 -3
- data/lib/braintree/risk_data/liability_shift.rb +22 -0
- data/lib/braintree/risk_data.rb +3 -1
- data/lib/braintree/successful_result.rb +2 -1
- data/lib/braintree/transaction.rb +24 -19
- data/lib/braintree/transaction_search.rb +2 -1
- data/lib/braintree/venmo_profile_data.rb +23 -0
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/webhook_notification.rb +5 -0
- data/lib/braintree/webhook_testing_gateway.rb +45 -15
- data/lib/braintree.rb +18 -8
- data/spec/integration/braintree/exchange_rate_quote_spec.rb +97 -0
- data/spec/integration/braintree/graphql_client_spec.rb +0 -2
- data/spec/integration/braintree/payment_method_nonce_spec.rb +2 -1
- data/spec/integration/braintree/payment_method_spec.rb +2 -2
- data/spec/integration/braintree/transaction_search_spec.rb +79 -0
- data/spec/integration/braintree/transaction_spec.rb +59 -6
- data/spec/integration/spec_helper.rb +6 -0
- data/spec/unit/braintree/enriched_customer_data_spec.rb +32 -0
- data/spec/unit/braintree/exchange_rate_quote_input_spec.rb +42 -0
- data/spec/unit/braintree/exchange_rate_quote_request_spec.rb +82 -0
- data/spec/unit/braintree/exchange_rate_quote_response_spec.rb +52 -0
- data/spec/unit/braintree/exchange_rate_quote_spec.rb +42 -0
- data/spec/unit/braintree/exchange_rate_spec.rb +23 -0
- data/spec/unit/braintree/payment_method_customer_data_updated_metadata_spec.rb +45 -0
- data/spec/unit/braintree/risk_data/liability_shift.rb +26 -0
- data/spec/unit/braintree/risk_data_spec.rb +33 -7
- data/spec/unit/braintree/transaction_spec.rb +8 -0
- data/spec/unit/braintree/venmo_profile_data_spec.rb +32 -0
- data/spec/unit/braintree/webhook_notification_spec.rb +26 -0
- metadata +24 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67348684ea4b3f86ef0063df5559298bf7563901010c0d68ee5fce5a64710c4c
|
4
|
+
data.tar.gz: 3b32cd4ccfe99e604a42a871003e38fa1679afd62bd8a44ffca6e7524dc30e85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f7f99a0d53c1e98faf5e0ef34fd47bee88be1a366412d267ada59d309b93d9119fcef2f2c0c535305a7de9340a044ddaf73550f72b69e0ab1e5ff403debf20e
|
7
|
+
data.tar.gz: ede1ae81a11c86079c8a7cd2f62673c4bbfefe5ef273bfb899d81583a302e39cb289fd9c1fdd5dfe83e573c55db6ff1ebf041a460f9a0089850b59468979b75a
|
data/braintree.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
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",
|
20
20
|
"source_code_uri" => "https://github.com/braintree/braintree_ruby",
|
21
|
-
"documentation_uri" => "https://
|
21
|
+
"documentation_uri" => "https://developer.paypal.com/braintree/docs"
|
22
22
|
}
|
23
23
|
end
|
24
24
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Braintree
|
2
|
+
class EnrichedCustomerData
|
3
|
+
include BaseModule
|
4
|
+
|
5
|
+
attr_reader :fields_updated
|
6
|
+
attr_reader :profile_data
|
7
|
+
|
8
|
+
def initialize(attributes) # :nodoc:
|
9
|
+
set_instance_variables_from_hash(attributes)
|
10
|
+
@profile_data = VenmoProfileData._new(attributes[:profile_data])
|
11
|
+
end
|
12
|
+
|
13
|
+
class << self
|
14
|
+
protected :new
|
15
|
+
end
|
16
|
+
|
17
|
+
def self._new(*args) # :nodoc:
|
18
|
+
self.new(*args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Braintree
|
2
|
+
class ExchangeRate
|
3
|
+
include BaseModule # :nodoc:
|
4
|
+
|
5
|
+
def initialize(gateway, attributes) # :nodoc:
|
6
|
+
set_instance_variables_from_hash(attributes)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.generate(exchange_rate_quote_request)
|
10
|
+
Configuration.gateway.exchange_rate_quote.generate(exchange_rate_quote_request)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Braintree
|
2
|
+
class ExchangeRateQuote
|
3
|
+
include BaseModule # :nodoc:
|
4
|
+
|
5
|
+
attr_reader :attrs
|
6
|
+
attr_reader :base_amount
|
7
|
+
attr_reader :exchange_rate
|
8
|
+
attr_reader :expires_at
|
9
|
+
attr_reader :id
|
10
|
+
attr_reader :quote_amount
|
11
|
+
attr_reader :refreshes_at
|
12
|
+
attr_reader :trade_rate
|
13
|
+
|
14
|
+
def initialize(attributes) # :nodoc:
|
15
|
+
@attrs = attributes.keys
|
16
|
+
set_instance_variables_from_hash(attributes)
|
17
|
+
end
|
18
|
+
|
19
|
+
def inspect # :nodoc:
|
20
|
+
inspected_attributes = @attrs.map { |attr| "#{attr}:#{send(attr).inspect}" }
|
21
|
+
"#<#{self.class} #{inspected_attributes.join(" ")}>"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Braintree
|
2
|
+
class ExchangeRateQuoteGateway # :nodoc
|
3
|
+
def initialize(gateway)
|
4
|
+
@gateway = gateway
|
5
|
+
end
|
6
|
+
|
7
|
+
DEFINITION = <<-GRAPHQL
|
8
|
+
mutation GenerateExchangeRateQuoteInput($input: GenerateExchangeRateQuoteInput!) {
|
9
|
+
generateExchangeRateQuote(input: $input) {
|
10
|
+
quotes {
|
11
|
+
id
|
12
|
+
baseAmount {value, currencyCode}
|
13
|
+
quoteAmount {value, currencyCode}
|
14
|
+
exchangeRate
|
15
|
+
tradeRate
|
16
|
+
expiresAt
|
17
|
+
refreshesAt
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
GRAPHQL
|
22
|
+
|
23
|
+
def generate(params)
|
24
|
+
response = @gateway.config.graphql_client.query(DEFINITION, {input: params})
|
25
|
+
|
26
|
+
if response.has_key?(:data) && response[:data][:generateExchangeRateQuote]
|
27
|
+
response[:data][:generateExchangeRateQuote]
|
28
|
+
elsif response[:errors]
|
29
|
+
ErrorResult.new(@gateway, response[:errors])
|
30
|
+
else
|
31
|
+
raise UnexpectedError, "expected :generateExchangeRateQuote or :api_error_response in GraphQL response"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Braintree
|
2
|
+
class ExchangeRateQuoteInput
|
3
|
+
include BaseModule # :nodoc:
|
4
|
+
|
5
|
+
attr_reader :attrs
|
6
|
+
attr_reader :base_currency
|
7
|
+
attr_reader :base_amount
|
8
|
+
attr_reader :markup
|
9
|
+
attr_reader :quote_currency
|
10
|
+
|
11
|
+
def initialize(attributes) # :nodoc:
|
12
|
+
@attrs = attributes.keys
|
13
|
+
set_instance_variables_from_hash(attributes)
|
14
|
+
end
|
15
|
+
|
16
|
+
def inspect # :nodoc:
|
17
|
+
inspected_attributes = @attrs.map { |attr| "#{attr}:#{send(attr).inspect}" }
|
18
|
+
"#<#{self.class} #{inspected_attributes.join(" ")}>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Braintree
|
2
|
+
class ExchangeRateQuoteRequest
|
3
|
+
include BaseModule # :nodoc:
|
4
|
+
|
5
|
+
attr_reader :quotes
|
6
|
+
|
7
|
+
def initialize(attributes) # :nodoc:
|
8
|
+
@attrs = attributes.keys
|
9
|
+
set_instance_variables_from_hash(attributes)
|
10
|
+
@quotes = (@quotes || []).map { |quote_hash| ExchangeRateQuoteInput.new(quote_hash) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect # :nodoc:
|
14
|
+
inspected_attributes = @attrs.map { |attr| "#{attr}:#{send(attr).inspect}" }
|
15
|
+
"#<#{self.class} #{inspected_attributes.join(" ")}>"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Braintree
|
2
|
+
class ExchangeRateQuoteResponse
|
3
|
+
include BaseModule # :nodoc:
|
4
|
+
|
5
|
+
attr_reader :quotes
|
6
|
+
|
7
|
+
def initialize(attributes) # :nodoc:
|
8
|
+
@attrs = attributes.keys
|
9
|
+
set_instance_variables_from_hash(attributes)
|
10
|
+
@quotes = (@quotes || []).map { |quote_hash| ExchangeRateQuote.new(quote_hash) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect # :nodoc:
|
14
|
+
inspected_attributes = @attrs.map { |attr| "#{attr}:#{send(attr).inspect}" }
|
15
|
+
"#<#{self.class} #{inspected_attributes.join(" ")}>"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/braintree/gateway.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Braintree
|
2
|
+
class PaymentMethodCustomerDataUpdatedMetadata
|
3
|
+
include BaseModule
|
4
|
+
|
5
|
+
attr_reader :token
|
6
|
+
attr_reader :payment_method
|
7
|
+
attr_reader :datetime_updated
|
8
|
+
attr_reader :enriched_customer_data
|
9
|
+
|
10
|
+
def initialize(gateway, attributes) # :nodoc:
|
11
|
+
set_instance_variables_from_hash(attributes)
|
12
|
+
@payment_method = PaymentMethodParser.parse_payment_method(gateway, attributes[:payment_method])
|
13
|
+
@enriched_customer_data = EnrichedCustomerData._new(enriched_customer_data) if enriched_customer_data
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
protected :new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self._new(*args) # :nodoc:
|
21
|
+
self.new(*args)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -106,10 +106,10 @@ module Braintree
|
|
106
106
|
response = @config.http.post("#{@config.base_merchant_path}#{path}", params)
|
107
107
|
if response[:plan]
|
108
108
|
SuccessfulResult.new(:plan => Plan._new(@gateway, response[:plan]))
|
109
|
-
elsif response[:
|
110
|
-
ErrorResult.new(@gateway, response[:
|
109
|
+
elsif response[:api_error_response]
|
110
|
+
ErrorResult.new(@gateway, response[:api_error_response])
|
111
111
|
else
|
112
|
-
raise UnexpectedError, "expected :plan or :
|
112
|
+
raise UnexpectedError, "expected :plan or :api_error_response"
|
113
113
|
end
|
114
114
|
end
|
115
115
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Braintree
|
2
|
+
class RiskData
|
3
|
+
class LiabilityShift
|
4
|
+
include BaseModule
|
5
|
+
|
6
|
+
attr_reader :responsible_party
|
7
|
+
attr_reader :conditions
|
8
|
+
|
9
|
+
def initialize(attributes)
|
10
|
+
set_instance_variables_from_hash attributes unless attributes.nil?
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
attr_order = [:responsible_party, :conditions]
|
15
|
+
formatted_attrs = attr_order.map do |attr|
|
16
|
+
"#{attr}: #{send(attr).inspect}"
|
17
|
+
end
|
18
|
+
"#<LiabilityShift #{formatted_attrs.join(", ")}>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/braintree/risk_data.rb
CHANGED
@@ -10,14 +10,16 @@ module Braintree
|
|
10
10
|
attr_reader :device_data_captured
|
11
11
|
attr_reader :fraud_service_provider
|
12
12
|
attr_reader :id
|
13
|
+
attr_reader :liability_shift
|
13
14
|
attr_reader :transaction_risk_score
|
14
15
|
|
15
16
|
def initialize(attributes)
|
16
17
|
set_instance_variables_from_hash attributes unless attributes.nil?
|
18
|
+
@liability_shift = LiabilityShift.new(attributes[:liability_shift]) if attributes[:liability_shift]
|
17
19
|
end
|
18
20
|
|
19
21
|
def inspect
|
20
|
-
attr_order = [:id, :decision, :decision_reasons, :device_data_captured, :fraud_service_provider, :transaction_risk_score]
|
22
|
+
attr_order = [:id, :decision, :decision_reasons, :device_data_captured, :fraud_service_provider, :liability_shift, :transaction_risk_score]
|
21
23
|
formatted_attrs = attr_order.map do |attr|
|
22
24
|
"#{attr}: #{send(attr).inspect}"
|
23
25
|
end
|
@@ -6,10 +6,12 @@ module Braintree
|
|
6
6
|
attr_reader :apple_pay_options
|
7
7
|
attr_reader :credentials
|
8
8
|
attr_reader :credit_card
|
9
|
+
attr_reader :credit_card_verification
|
9
10
|
attr_reader :customer
|
10
11
|
attr_reader :disputes
|
11
12
|
attr_reader :document_upload
|
12
13
|
attr_reader :evidence
|
14
|
+
attr_reader :exchange_rate_quote_payload
|
13
15
|
attr_reader :merchant
|
14
16
|
attr_reader :merchant_account
|
15
17
|
attr_reader :merchant_accounts
|
@@ -22,7 +24,6 @@ module Braintree
|
|
22
24
|
attr_reader :supported_networks
|
23
25
|
attr_reader :transaction
|
24
26
|
attr_reader :us_bank_account_verification
|
25
|
-
attr_reader :credit_card_verification
|
26
27
|
|
27
28
|
def initialize(attributes = {}) # :nodoc:
|
28
29
|
@attrs = attributes.keys
|
@@ -91,6 +91,7 @@ module Braintree
|
|
91
91
|
end
|
92
92
|
|
93
93
|
attr_reader :acquirer_reference_number
|
94
|
+
attr_reader :ach_return_code
|
94
95
|
attr_reader :add_ons
|
95
96
|
attr_reader :additional_processor_response # The raw response from the processor.
|
96
97
|
attr_reader :amount
|
@@ -146,6 +147,7 @@ module Braintree
|
|
146
147
|
attr_reader :refund_ids
|
147
148
|
attr_reader :refunded_transaction_id
|
148
149
|
attr_reader :refunded_installments
|
150
|
+
attr_reader :retried
|
149
151
|
attr_reader :retrieval_reference_number
|
150
152
|
attr_reader :risk_data
|
151
153
|
attr_reader :samsung_pay_card_details
|
@@ -168,6 +170,7 @@ module Braintree
|
|
168
170
|
attr_reader :venmo_account_details
|
169
171
|
attr_reader :visa_checkout_card_details
|
170
172
|
attr_reader :voice_referral_number
|
173
|
+
attr_reader :ach_return_responses
|
171
174
|
|
172
175
|
def self.adjust_authorization(*args)
|
173
176
|
Configuration.gateway.transaction.adjust_authorization(*args)
|
@@ -288,38 +291,40 @@ module Braintree
|
|
288
291
|
def initialize(gateway, attributes) # :nodoc:
|
289
292
|
@gateway = gateway
|
290
293
|
set_instance_variables_from_hash(attributes)
|
294
|
+
|
291
295
|
@amount = Util.to_big_decimal(amount)
|
296
|
+
@apple_pay_details = ApplePayDetails.new(@apple_pay)
|
297
|
+
@billing_details = AddressDetails.new(@billing)
|
292
298
|
@credit_card_details = CreditCardDetails.new(@credit_card)
|
293
|
-
@
|
294
|
-
@subscription_details = SubscriptionDetails.new(@subscription)
|
299
|
+
@custom_fields = attributes[:custom_fields].is_a?(Hash) ? attributes[:custom_fields] : {}
|
295
300
|
@customer_details = CustomerDetails.new(@customer)
|
296
|
-
@billing_details = AddressDetails.new(@billing)
|
297
|
-
@disbursement_details = DisbursementDetails.new(@disbursement_details)
|
298
|
-
@shipping_details = AddressDetails.new(@shipping)
|
299
|
-
@status_history = attributes[:status_history] ? attributes[:status_history].map { |s| StatusDetails.new(s) } : []
|
300
|
-
@tax_amount = Util.to_big_decimal(tax_amount)
|
301
301
|
@descriptor = Descriptor.new(@descriptor)
|
302
|
+
@disbursement_details = DisbursementDetails.new(@disbursement_details)
|
303
|
+
@google_pay_details = GooglePayDetails.new(@google_pay_card)
|
302
304
|
@local_payment_details = LocalPaymentDetails.new(@local_payment)
|
305
|
+
@payment_instrument_type = attributes[:payment_instrument_type]
|
303
306
|
@paypal_details = PayPalDetails.new(@paypal)
|
304
307
|
@paypal_here_details = PayPalHereDetails.new(@paypal_here)
|
305
|
-
@
|
306
|
-
@
|
308
|
+
@samsung_pay_card_details = SamsungPayCardDetails.new(attributes[:samsung_pay_card])
|
309
|
+
@sca_exemption_requested = attributes[:sca_exemption_requested]
|
310
|
+
@service_fee_amount = Util.to_big_decimal(service_fee_amount)
|
311
|
+
@shipping_details = AddressDetails.new(@shipping)
|
312
|
+
@status_history = attributes[:status_history] ? attributes[:status_history].map { |s| StatusDetails.new(s) } : []
|
313
|
+
@subscription_details = SubscriptionDetails.new(@subscription)
|
314
|
+
@tax_amount = Util.to_big_decimal(tax_amount)
|
307
315
|
@venmo_account_details = VenmoAccountDetails.new(@venmo_account)
|
308
|
-
|
309
|
-
|
310
|
-
add_ons.map! { |attrs| AddOn._new(attrs) } if add_ons
|
311
|
-
discounts.map! { |attrs| Discount._new(attrs) } if discounts
|
312
|
-
@payment_instrument_type = attributes[:payment_instrument_type]
|
313
|
-
@risk_data = RiskData.new(attributes[:risk_data]) if attributes[:risk_data]
|
316
|
+
@visa_checkout_card_details = VisaCheckoutCardDetails.new(attributes[:visa_checkout_card])
|
317
|
+
|
314
318
|
@facilitated_details = FacilitatedDetails.new(attributes[:facilitated_details]) if attributes[:facilitated_details]
|
315
319
|
@facilitator_details = FacilitatorDetails.new(attributes[:facilitator_details]) if attributes[:facilitator_details]
|
320
|
+
@risk_data = RiskData.new(attributes[:risk_data]) if attributes[:risk_data]
|
316
321
|
@three_d_secure_info = ThreeDSecureInfo.new(attributes[:three_d_secure_info]) if attributes[:three_d_secure_info]
|
317
322
|
@us_bank_account_details = UsBankAccountDetails.new(attributes[:us_bank_account]) if attributes[:us_bank_account]
|
318
|
-
@visa_checkout_card_details = VisaCheckoutCardDetails.new(attributes[:visa_checkout_card])
|
319
|
-
@samsung_pay_card_details = SamsungPayCardDetails.new(attributes[:samsung_pay_card])
|
320
|
-
@sca_exemption_requested = attributes[:sca_exemption_requested]
|
321
|
-
authorization_adjustments.map! { |attrs| AuthorizationAdjustment._new(attrs) } if authorization_adjustments
|
322
323
|
|
324
|
+
add_ons.map! { |attrs| AddOn._new(attrs) } if add_ons
|
325
|
+
authorization_adjustments.map! { |attrs| AuthorizationAdjustment._new(attrs) } if authorization_adjustments
|
326
|
+
discounts.map! { |attrs| Discount._new(attrs) } if discounts
|
327
|
+
disputes.map! { |attrs| Dispute._new(attrs) } if disputes
|
323
328
|
installments.map! { |attrs| Installment.new(attrs) } if installments
|
324
329
|
refunded_installments.map! { |attrs| Installment.new(attrs) } if refunded_installments
|
325
330
|
end
|
@@ -61,12 +61,13 @@ module Braintree
|
|
61
61
|
multiple_value_field :source
|
62
62
|
multiple_value_field :type, :allows => Transaction::Type::All
|
63
63
|
multiple_value_field :store_ids
|
64
|
+
multiple_value_field :reason_code
|
64
65
|
|
65
66
|
key_value_fields :refund
|
66
67
|
|
67
68
|
range_fields :amount, :created_at, :authorization_expired_at, :authorized_at,
|
68
69
|
:failed_at, :gateway_rejected_at, :processor_declined_at,
|
69
70
|
:settled_at, :submitted_for_settlement_at, :voided_at,
|
70
|
-
:disbursement_date, :dispute_date
|
71
|
+
:disbursement_date, :dispute_date, :ach_return_responses_created_at
|
71
72
|
end
|
72
73
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Braintree
|
2
|
+
class VenmoProfileData
|
3
|
+
include BaseModule
|
4
|
+
|
5
|
+
attr_reader :username
|
6
|
+
attr_reader :first_name
|
7
|
+
attr_reader :last_name
|
8
|
+
attr_reader :phone_number
|
9
|
+
attr_reader :email
|
10
|
+
|
11
|
+
def initialize(attributes) # :nodoc:
|
12
|
+
set_instance_variables_from_hash(attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
protected :new
|
17
|
+
end
|
18
|
+
|
19
|
+
def self._new(*args) # :nodoc:
|
20
|
+
self.new(*args)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/braintree/version.rb
CHANGED
@@ -38,6 +38,8 @@ module Braintree
|
|
38
38
|
PartnerMerchantDisconnected = "partner_merchant_disconnected"
|
39
39
|
PartnerMerchantDeclined = "partner_merchant_declined"
|
40
40
|
|
41
|
+
PaymentMethodCustomerDataUpdated = "payment_method_customer_data_updated"
|
42
|
+
|
41
43
|
PaymentMethodRevokedByCustomer = "payment_method_revoked_by_customer"
|
42
44
|
|
43
45
|
RecipientUpdatedGrantedPaymentMethod = "recipient_updated_granted_payment_method"
|
@@ -73,6 +75,7 @@ module Braintree
|
|
73
75
|
attr_reader :local_payment_reversed
|
74
76
|
attr_reader :oauth_access_revocation
|
75
77
|
attr_reader :partner_merchant
|
78
|
+
attr_reader :payment_method_customer_data_updated_metadata
|
76
79
|
attr_reader :source_merchant_id
|
77
80
|
attr_reader :subscription
|
78
81
|
attr_reader :timestamp
|
@@ -108,6 +111,8 @@ module Braintree
|
|
108
111
|
@local_payment_expired = LocalPaymentExpired._new(@subject[:local_payment_expired]) if @subject.has_key?(:local_payment_expired) && Kind::LocalPaymentExpired == @kind
|
109
112
|
@local_payment_funded = LocalPaymentFunded._new(@subject[:local_payment_funded]) if @subject.has_key?(:local_payment_funded) && Kind::LocalPaymentFunded == @kind
|
110
113
|
@local_payment_reversed = LocalPaymentReversed._new(@subject[:local_payment_reversed]) if @subject.has_key?(:local_payment_reversed) && Kind::LocalPaymentReversed == @kind
|
114
|
+
@payment_method_customer_data_updated_metadata = PaymentMethodCustomerDataUpdatedMetadata._new(gateway, @subject[:payment_method_customer_data_updated_metadata]) if @subject.has_key?(:payment_method_customer_data_updated_metadata) && Kind::PaymentMethodCustomerDataUpdated == @kind
|
115
|
+
|
111
116
|
end
|
112
117
|
|
113
118
|
def merchant_account
|
@@ -96,6 +96,8 @@ module Braintree
|
|
96
96
|
_local_payment_funded_sample_xml(id)
|
97
97
|
when Braintree::WebhookNotification::Kind::LocalPaymentReversed
|
98
98
|
_local_payment_reversed_sample_xml
|
99
|
+
when Braintree::WebhookNotification::Kind::PaymentMethodCustomerDataUpdated
|
100
|
+
_payment_method_customer_data_updated_sample_xml(id)
|
99
101
|
else
|
100
102
|
_subscription_sample_xml(id)
|
101
103
|
end
|
@@ -899,21 +901,7 @@ module Braintree
|
|
899
901
|
end
|
900
902
|
|
901
903
|
def _granted_payment_method_revoked_xml(id)
|
902
|
-
|
903
|
-
<venmo-account>
|
904
|
-
<created-at type='dateTime'>2018-10-11T21:28:37Z</created-at>
|
905
|
-
<updated-at type='dateTime'>2018-10-11T21:28:37Z</updated-at>
|
906
|
-
<default type='boolean'>true</default>
|
907
|
-
<image-url>https://assets.braintreegateway.com/payment_method_logo/venmo.png?environment=test</image-url>
|
908
|
-
<token>#{id}</token>
|
909
|
-
<source-description>Venmo Account: venmojoe</source-description>
|
910
|
-
<username>venmojoe</username>
|
911
|
-
<venmo-user-id>456</venmo-user-id>
|
912
|
-
<subscriptions type='array'/>
|
913
|
-
<customer-id>venmo_customer_id</customer-id>
|
914
|
-
<global-id>cGF5bWVudG1ldGhvZF92ZW5tb2FjY291bnQ</global-id>
|
915
|
-
</venmo-account>
|
916
|
-
XML
|
904
|
+
_venmo_account_xml(id)
|
917
905
|
end
|
918
906
|
|
919
907
|
def _payment_method_revoked_by_customer_sample_xml(id)
|
@@ -986,5 +974,47 @@ module Braintree
|
|
986
974
|
</local-payment-reversed>
|
987
975
|
XML
|
988
976
|
end
|
977
|
+
|
978
|
+
def _payment_method_customer_data_updated_sample_xml(id)
|
979
|
+
<<-XML
|
980
|
+
<payment-method-customer-data-updated-metadata>
|
981
|
+
<token>TOKEN-12345</token>
|
982
|
+
<payment-method>
|
983
|
+
#{_venmo_account_xml(id)}
|
984
|
+
</payment-method>
|
985
|
+
<datetime-updated type='dateTime'>2022-01-01T21:28:37Z</datetime-updated>
|
986
|
+
<enriched-customer-data>
|
987
|
+
<fields-updated type='array'>
|
988
|
+
<item>username</item>
|
989
|
+
</fields-updated>
|
990
|
+
<profile-data>
|
991
|
+
<username>venmo_username</username>
|
992
|
+
<first-name>John</first-name>
|
993
|
+
<last-name>Doe</last-name>
|
994
|
+
<phone-number>1231231234</phone-number>
|
995
|
+
<email>john.doe@paypal.com</email>
|
996
|
+
</profile-data>
|
997
|
+
</enriched-customer-data>
|
998
|
+
</payment-method-customer-data-updated-metadata>
|
999
|
+
XML
|
1000
|
+
end
|
1001
|
+
|
1002
|
+
def _venmo_account_xml(id)
|
1003
|
+
<<-XML
|
1004
|
+
<venmo-account>
|
1005
|
+
<created-at type='dateTime'>2018-10-11T21:28:37Z</created-at>
|
1006
|
+
<updated-at type='dateTime'>2018-10-11T21:28:37Z</updated-at>
|
1007
|
+
<default type='boolean'>true</default>
|
1008
|
+
<image-url>https://assets.braintreegateway.com/payment_method_logo/venmo.png?environment=test</image-url>
|
1009
|
+
<token>#{id}</token>
|
1010
|
+
<source-description>Venmo Account: venmojoe</source-description>
|
1011
|
+
<username>venmojoe</username>
|
1012
|
+
<venmo-user-id>456</venmo-user-id>
|
1013
|
+
<subscriptions type='array'/>
|
1014
|
+
<customer-id>venmo_customer_id</customer-id>
|
1015
|
+
<global-id>cGF5bWVudG1ldGhvZF92ZW5tb2FjY291bnQ</global-id>
|
1016
|
+
</venmo-account>
|
1017
|
+
XML
|
1018
|
+
end
|
989
1019
|
end
|
990
1020
|
end
|
data/lib/braintree.rb
CHANGED
@@ -65,9 +65,16 @@ require "braintree/dispute/transaction"
|
|
65
65
|
require "braintree/dispute/transaction_details"
|
66
66
|
require "braintree/document_upload"
|
67
67
|
require "braintree/document_upload_gateway"
|
68
|
+
require "braintree/enriched_customer_data"
|
68
69
|
require "braintree/error_codes"
|
69
70
|
require "braintree/error_result"
|
70
71
|
require "braintree/errors"
|
72
|
+
require "braintree/exchange_rate"
|
73
|
+
require "braintree/exchange_rate_quote"
|
74
|
+
require "braintree/exchange_rate_quote_gateway"
|
75
|
+
require "braintree/exchange_rate_quote_input"
|
76
|
+
require "braintree/exchange_rate_quote_response"
|
77
|
+
require "braintree/exchange_rate_quote_request"
|
71
78
|
require "braintree/gateway"
|
72
79
|
require "braintree/graphql_client"
|
73
80
|
require "braintree/google_pay_card"
|
@@ -88,6 +95,7 @@ require "braintree/oauth_gateway"
|
|
88
95
|
require "braintree/oauth_credentials"
|
89
96
|
require "braintree/payment_instrument_type"
|
90
97
|
require "braintree/payment_method"
|
98
|
+
require "braintree/payment_method_customer_data_updated_metadata"
|
91
99
|
require "braintree/payment_method_gateway"
|
92
100
|
require "braintree/payment_method_nonce"
|
93
101
|
require "braintree/payment_method_nonce_details"
|
@@ -100,6 +108,7 @@ require "braintree/plan"
|
|
100
108
|
require "braintree/plan_gateway"
|
101
109
|
require "braintree/processor_response_types"
|
102
110
|
require "braintree/risk_data"
|
111
|
+
require "braintree/risk_data/liability_shift"
|
103
112
|
require "braintree/facilitated_details"
|
104
113
|
require "braintree/facilitator_details"
|
105
114
|
require "braintree/three_d_secure_info"
|
@@ -128,33 +137,34 @@ require "braintree/test/venmo_sdk"
|
|
128
137
|
require "braintree/test/nonce"
|
129
138
|
require "braintree/test/transaction_amounts"
|
130
139
|
require "braintree/testing_gateway"
|
131
|
-
require "braintree/transaction"
|
132
|
-
require "braintree/transaction_line_item"
|
133
140
|
require "braintree/test_transaction"
|
141
|
+
require "braintree/transaction"
|
134
142
|
require "braintree/transaction/address_details"
|
135
143
|
require "braintree/transaction/apple_pay_details"
|
136
144
|
require "braintree/transaction/credit_card_details"
|
137
145
|
require "braintree/transaction/customer_details"
|
138
146
|
require "braintree/transaction/disbursement_details"
|
139
147
|
require "braintree/transaction/google_pay_details"
|
148
|
+
require "braintree/transaction/installment"
|
149
|
+
require "braintree/transaction/installment/adjustment"
|
140
150
|
require "braintree/transaction/paypal_details"
|
141
151
|
require "braintree/transaction/paypal_here_details"
|
152
|
+
require "braintree/transaction/samsung_pay_card_details"
|
153
|
+
require "braintree/transaction/status_details"
|
142
154
|
require "braintree/transaction/subscription_details"
|
155
|
+
require "braintree/transaction/venmo_account_details"
|
156
|
+
require "braintree/transaction/visa_checkout_card_details"
|
143
157
|
require "braintree/transaction_gateway"
|
158
|
+
require "braintree/transaction_line_item"
|
144
159
|
require "braintree/transaction_line_item_gateway"
|
145
160
|
require "braintree/transaction_search"
|
146
|
-
require "braintree/transaction/status_details"
|
147
|
-
require "braintree/transaction/venmo_account_details"
|
148
|
-
require "braintree/transaction/visa_checkout_card_details"
|
149
|
-
require "braintree/transaction/samsung_pay_card_details"
|
150
|
-
require "braintree/transaction/installment"
|
151
|
-
require "braintree/transaction/installment/adjustment"
|
152
161
|
require "braintree/unknown_payment_method"
|
153
162
|
require "braintree/disbursement"
|
154
163
|
require "braintree/dispute_search"
|
155
164
|
require "braintree/validation_error"
|
156
165
|
require "braintree/validation_error_collection"
|
157
166
|
require "braintree/venmo_account"
|
167
|
+
require "braintree/venmo_profile_data"
|
158
168
|
require "braintree/version"
|
159
169
|
require "braintree/visa_checkout_card"
|
160
170
|
require "braintree/samsung_pay_card"
|