class Maxmind::ChargebackRequest

Constants

DefaultTimeout

Attributes

default_request_type[RW]
timeout[RW]
chargeback_code[RW]

Optional Fields

client_ip[RW]

Required Fields

fraud_score[RW]

Optional Fields

maxmind_id[RW]

Optional Fields

transaction_id[RW]

Optional Fields

Public Class Methods

new(attrs={}) click to toggle source
# File lib/maxmind/chargeback_request.rb, line 18
def initialize(attrs={})
  self.attributes = attrs
end

Public Instance Methods

attributes=(attrs={}) click to toggle source
# File lib/maxmind/chargeback_request.rb, line 22
def attributes=(attrs={})
  attrs.each do |k, v|
    self.send("#{k}=", v)
  end
end
process() click to toggle source
# File lib/maxmind/chargeback_request.rb, line 33
def process
  process!
rescue Exception => e
  false
end
process!() click to toggle source
# File lib/maxmind/chargeback_request.rb, line 28
def process!
  resp = post(query)
  Maxmind::ChargebackResponse.new(resp.message, resp.code)
end
query() click to toggle source
# File lib/maxmind/chargeback_request.rb, line 39
def query
  validate

  required_fields = {
    :ip_address       => @client_ip,
  }

  optional_fields = {
    :chargeback_code  => @chargeback_code,
    :fraud_score      => @fraud_score,
    :maxmind_id       => @maxmind_id,
    :transaction_id   => @transaction_id
  }

  field_set = required_fields.merge(optional_fields)
  field_set.reject {|k, v| v.nil? }.to_json
end

Protected Instance Methods

validate() click to toggle source
# File lib/maxmind/chargeback_request.rb, line 88
def validate
  raise ArgumentError, 'License key is required' unless Maxmind::license_key
  raise ArgumentError, 'User ID is required' unless Maxmind::user_id
  raise ArgumentError, 'IP address is required' unless client_ip
end

Private Instance Methods

post(query_params) click to toggle source

Upon a failure at the first URL, will automatically retry with the second & third ones before finally raising an exception Returns an HTTPResponse object

# File lib/maxmind/chargeback_request.rb, line 62
def post(query_params)
  servers ||= SERVERS.map{|hostname| "https://#{hostname}/minfraud/chargeback"}
  url = URI.parse(servers.shift)

  req = Net::HTTP::Post.new(url.path, initheader = {'Content-Type' =>'application/json'})
  req.basic_auth Maxmind::user_id, Maxmind::license_key
  req.body = query_params

  h = Net::HTTP.new(url.host, url.port)
  h.use_ssl = true
  h.verify_mode = OpenSSL::SSL::VERIFY_NONE

  # set some timeouts
  h.open_timeout  = 60 # this blocks forever by default, lets be a bit less crazy.
  h.read_timeout  = self.class.timeout || DefaultTimeout
  h.ssl_timeout   = self.class.timeout || DefaultTimeout

  h.start { |http| http.request(req) }

rescue Exception => e
  retry if servers.size > 0
  raise e
end