class CobroDigital::Client

Attributes

boletas[RW]
client_to_use[RW]
http_method[RW]
id_comercio[RW]
micrositios[RW]
pagadores[RW]
request_xml[RW]
requests[RW]
sid[RW]
transacciones[RW]

Public Class Methods

new(attrs={}) click to toggle source
# File lib/cobro_digital.rb, line 31
def initialize(attrs={})
  @id_comercio    = attrs[:id_comercio]
  @sid            = attrs[:sid]
  @client_to_use  = attrs[:con_client].present? ? attrs[:con_client] : CobroDigital::SOAP
  # @with_handshake = attrs[:handshake].present? ? attrs[:handshake] : true
  @pagadores      = []
  @boletas        = []
  @transacciones  = []
  @micrositios    = []
  @request_xml    = nil
end

Public Instance Methods

call(request) click to toggle source
# File lib/cobro_digital.rb, line 80
def call(request)
  send("#{client_to_use}_client", comercio.merge(request))
end
comercio() click to toggle source
# File lib/cobro_digital.rb, line 84
def comercio
  { 'idComercio' => @id_comercio, 'sid' => @sid, 'handshake' => Digest::MD5.hexdigest(Time.now.to_f.to_s) }
end
https_client(params) click to toggle source
# File lib/cobro_digital.rb, line 58
def https_client(params)
  case http_method
  when CobroDigital::Https::POST
    uri = URI(CobroDigital::URI)
    req = "Net::HTTP::#{http_method}".constantize.new(uri)
    req.set_form_data(params)
  when CobroDigital::Https::GET
    uri = URI([CobroDigital::URI, URI.encode_www_form(data)].join('?'))
    req = "Net::HTTP::#{http_method}".constantize.new(uri)
  end

  Net::HTTP.start(
    uri.hostname,
    uri.port,
    use_ssl: uri.scheme == CobroDigital::HTTPS,
    open_timeout: CobroDigital::TIMEOUT,
    read_timeout: CobroDigital::TIMEOUT
  ) do |http|
    http.request(req)
  end
end
soap_client(params) click to toggle source
# File lib/cobro_digital.rb, line 43
def soap_client(params)
  client = Savon.client(
    wsdl: CobroDigital::WSDL,
    log_level: :debug,
    pretty_print_xml: true,
    open_timeout: CobroDigital::TIMEOUT,
    read_timeout: CobroDigital::TIMEOUT
  )
  operation = client.operation(:webservice_cobrodigital)
  request = operation.build(message: { 'parametros_de_entrada' => params.to_json })
  @request_xml = request.pretty

  client.call(:webservice_cobrodigital, message: { 'parametros_de_entrada' => params.to_json })
end