class Braintree::PaymentMethodGateway

Public Class Methods

_create_signature() click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 145
def self._create_signature
  _signature(:create)
end
_delete_signature() click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 153
def self._delete_signature
  [:revoke_all_grants]
end
_signature(type) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 157
def self._signature(type)
  billing_address_params = AddressGateway._shared_signature
  paypal_options_shipping_signature = AddressGateway._shared_signature
  # NEXT_MAJOR_VERSION Remove venmo_sdk_session
  # The old venmo SDK class has been deprecated
  options = [
    :make_default,
    :skip_advanced_fraud_checking,
    :us_bank_account_verification_method,
    :venmo_sdk_session, # Deprecated
    :verification_account_type,
    :verification_add_ons,
    :verification_amount,
    :verification_currency_iso_code,
    :verification_merchant_account_id,
    :verify_card,
    :paypal => [
      :payee_email,
      :order_id,
      :custom_field,
      :description,
      :amount,
      {:shipping => paypal_options_shipping_signature}
    ],
  ]
  # NEXT_MAJOR_VERSION Remove venmo_sdk_payment_method_code
  # The old venmo SDK class has been deprecated
  signature = [
    :billing_address_id, :cardholder_name, :cvv, :expiration_date, :expiration_month,
    :expiration_year, :number, :token, :venmo_sdk_payment_method_code, # Deprecated
    :device_data, :payment_method_nonce,
    {:options => options},
    {:billing_address => billing_address_params}
  ]
  signature << {
    :three_d_secure_pass_thru => [
      :eci_flag,
      :cavv,
      :xid,
      :three_d_secure_version,
      :authentication_response,
      :directory_response,
      :cavv_algorithm,
      :ds_transaction_id,
    ]
  }

  case type
  when :create
    options << :fail_on_duplicate_payment_method
    signature << :customer_id
    signature << :paypal_refresh_token
  when :update
    billing_address_params << {:options => [:update_existing]}
  else
    raise ArgumentError
  end

  return signature
end
_update_signature() click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 149
def self._update_signature
  _signature(:update)
end
new(gateway) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 5
def initialize(gateway)
  @gateway = gateway
  @config = gateway.config
  @config.assert_has_access_token_or_keys
end

Public Instance Methods

_do_create(path, params=nil) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 24
def _do_create(path, params=nil)
  response = @config.http.post("#{@config.base_merchant_path}#{path}", params)
  if response[:api_error_response]
    ErrorResult.new(@gateway, response[:api_error_response])
  elsif response
    SuccessfulResult.new(:payment_method => PaymentMethodParser.parse_payment_method(@gateway, response))
  else
    raise UnexpectedError, "expected :payment_method or :api_error_response"
  end
end
_do_grant(path, params=nil) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 110
def _do_grant(path, params=nil)
  response = @config.http.post("#{@config.base_merchant_path}#{path}", params)
  if response[:payment_method_nonce]
    SuccessfulResult.new(:payment_method_nonce => PaymentMethodNonce._new(@gateway, response[:payment_method_nonce]))
  elsif response[:api_error_response]
    ErrorResult.new(@gateway, response[:api_error_response])
  else
    raise UnexpectedError, "expected :payment_method_nonce or :api_error_response"
  end
end
_do_revoke(path, params=nil) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 134
def _do_revoke(path, params=nil)
  response = @config.http.post("#{@config.base_merchant_path}#{path}", params)
  if response[:success]
    SuccessfulResult.new
  elsif response[:api_error_response]
    ErrorResult.new(@gateway, response[:api_error_response])
  else
    raise UnexpectedError, "expected :success or :api_error_response"
  end
end
_do_update(http_verb, path, params) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 79
def _do_update(http_verb, path, params)
  response = @config.http.send(http_verb, "#{@config.base_merchant_path}#{path}", params)
  if response[:api_error_response]
    ErrorResult.new(@gateway, response[:api_error_response])
  elsif response
    SuccessfulResult.new(:payment_method => PaymentMethodParser.parse_payment_method(@gateway, response))
  else
    raise UnexpectedError, "expected :payment_method or :api_error_response"
  end
end
create(attributes) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 11
def create(attributes)
  # NEXT_MAJOR_VERSION remove this check
  if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
    warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
  end
  Util.verify_keys(PaymentMethodGateway._create_signature, attributes)
  _do_create("/payment_methods", :payment_method => attributes)
end
create!(*args) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 20
def create!(*args)
  return_object_or_raise(:payment_method) { create(*args) }
end
delete(token, options = {}) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 35
def delete(token, options = {})
  Util.verify_keys(PaymentMethodGateway._delete_signature, options)
  query_param = "?" + Util.hash_to_query_string(options) if not options.empty?
  @config.http.delete("#{@config.base_merchant_path}/payment_methods/any/#{token}#{query_param}")
  SuccessfulResult.new
end
find(token) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 42
def find(token)
  raise ArgumentError if token.nil? || token.to_s.strip == ""
  response = @config.http.get("#{@config.base_merchant_path}/payment_methods/any/#{token}")
  if response.has_key?(:credit_card)
    CreditCard._new(@gateway, response[:credit_card])
  elsif response.has_key?(:paypal_account)
    PayPalAccount._new(@gateway, response[:paypal_account])
  elsif response.has_key?(:us_bank_account)
    UsBankAccount._new(@gateway, response[:us_bank_account])
  elsif response.has_key?(:apple_pay_card)
    ApplePayCard._new(@gateway, response[:apple_pay_card])
  elsif response.has_key?(:android_pay_card)
    GooglePayCard._new(@gateway, response[:android_pay_card])
  elsif response.has_key?(:venmo_account)
    VenmoAccount._new(@gateway, response[:venmo_account])
  elsif response.has_key?(:sepa_debit_account)
    SepaDirectDebitAccount._new(@gateway, response[:sepa_debit_account])
  else
    UnknownPaymentMethod._new(@gateway, response)
  end
rescue NotFoundError
  raise NotFoundError, "payment method with token #{token.inspect} not found"
end
grant(token, options = {}) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 90
def grant(token, options = {})
  raise ArgumentError if token.nil? || token.to_s.strip == ""
  if  options.class == Hash
    grant_options = options
  elsif [true, false].include?(options)
    grant_options = {:allow_vaulting => options}
  else
    raise ArgumentError
  end

  _do_grant(
    "/payment_methods/grant",
    :payment_method => {
      :shared_payment_method_token => token,
    }.merge(grant_options),
  )
rescue NotFoundError
  raise NotFoundError, "payment method with token #{token.inspect} not found"
end
revoke(token) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 121
def revoke(token)
  raise ArgumentError if token.nil? || token.to_s.strip == ""

  _do_revoke(
    "/payment_methods/revoke",
    :payment_method => {
      :shared_payment_method_token => token
    },
  )
rescue NotFoundError
  raise NotFoundError, "payment method with token #{token.inspect} not found"
end
update(token, attributes) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 66
def update(token, attributes)
  # NEXT_MAJOR_VERSION remove this check
  if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
    warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
  end
  Util.verify_keys(PaymentMethodGateway._update_signature, attributes)
  _do_update(:put, "/payment_methods/any/#{token}", :payment_method => attributes)
end
update!(*args) click to toggle source
# File lib/braintree/payment_method_gateway.rb, line 75
def update!(*args)
  return_object_or_raise(:payment_method) { update(*args) }
end