class Vantiv::Api::Request

Constants

ENDPOINT_XML_TRANSACTION_TYPE

Attributes

body[R]

Public Class Methods

new(endpoint:, body:, response_object:) click to toggle source
# File lib/vantiv/api/request.rb, line 16
def initialize(endpoint:, body:, response_object:)
  @endpoint = endpoint
  @response_object = response_object
  @retry_count = 0

  @body = populated_request_body(body)
end

Public Instance Methods

run() click to toggle source
# File lib/vantiv/api/request.rb, line 24
def run
  run_request_with_retries
end
run_request() click to toggle source
# File lib/vantiv/api/request.rb, line 28
def run_request
  http_response = send_request(build_request)
  populated_response(@response_object, http_response)
end

Private Instance Methods

build_request() click to toggle source
# File lib/vantiv/api/request.rb, line 55
def build_request
  request = Net::HTTP::Post.new(uri.request_uri, header)
  request.body = body.to_xml
  request
end
header() click to toggle source
# File lib/vantiv/api/request.rb, line 67
def header
  {
    "Content-Type" =>"text/xml"
  }
end
increment_retry_count() click to toggle source
# File lib/vantiv/api/request.rb, line 103
def increment_retry_count
  @retry_count += 1
end
max_retries_exceeded?() click to toggle source
# File lib/vantiv/api/request.rb, line 107
def max_retries_exceeded?
  @retry_count > 3
end
populated_request_body(body) click to toggle source
# File lib/vantiv/api/request.rb, line 35
def populated_request_body(body)
  populated_body = body.dup

  if populated_body.card && populated_body.payment_account
    populated_body.card.payment_account_id = populated_body.payment_account.id
  end

  populated_body.transaction ||= Vantiv::Api::Transaction.new
  populated_body.transaction.type = ENDPOINT_XML_TRANSACTION_TYPE.fetch(@endpoint.to_sym)
  populated_body.transaction.address = populated_body.address
  populated_body.transaction.card = populated_body.card if populated_body.card
  populated_body.transaction.report_group = populated_body.report_group
  populated_body.transaction.application_id = populated_body.application_id

  populated_body.xmlns = "http://www.litle.com/schema"
  populated_body.version = "10.5"

  populated_body
end
populated_response(response, http_response) click to toggle source
# File lib/vantiv/api/request.rb, line 87
def populated_response(response, http_response)
  new_response = response.dup

  new_response.raw_body = http_response.body
  new_response.httpok = http_response.code_type == Net::HTTPOK
  new_response.http_response_code = http_response.code

  response_body = ResponseBodyRepresenterXml.new(
    Vantiv::Api::ResponseBody.new
  ).from_xml(http_response.body)

  new_response.body = response_body

  new_response
end
root_uri() click to toggle source
# File lib/vantiv/api/request.rb, line 77
def root_uri
  if Vantiv::Environment.production?
    "https://transact.vantivcnp.com"
  elsif Vantiv::Environment.postcertification?
    "https://transact.vantivpostlive.com"
  elsif Vantiv::Environment.precertification?
    "https://transact.vantivprelive.com"
  end
end
run_request_with_retries() click to toggle source
# File lib/vantiv/api/request.rb, line 111
def run_request_with_retries
  begin
    run_request
  rescue MultiJson::ParseError, Nokogiri::XML::SyntaxError => e
    increment_retry_count
    max_retries_exceeded? ? raise(e) : retry
  end
end
send_request(request) click to toggle source
# File lib/vantiv/api/request.rb, line 61
def send_request(request)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.request(request)
end
uri() click to toggle source
# File lib/vantiv/api/request.rb, line 73
def uri
  @uri ||= URI.parse("#{root_uri}/vap/communicator/online")
end