Class: CobroDigital::Client
- Inherits:
-
Object
- Object
- CobroDigital::Client
- Defined in:
- lib/cobro_digital.rb
Instance Attribute Summary collapse
-
#boletas ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#client_to_use ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#http_method ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#id_comercio ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#micrositios ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#pagadores ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#request_xml ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#requests ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#sid ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador). -
#transacciones ⇒ Object
NOTA:
sidyrequest_xmlcontienen datos sensibles (credencial del comercio y XML con sid + PII del pagador).
Instance Method Summary collapse
- #call(request) ⇒ Object
- #comercio ⇒ Object
- #https_client(params) ⇒ Object
-
#initialize(attrs = {}) ⇒ Client
constructor
A new instance of Client.
- #soap_client(params) ⇒ Object
Constructor Details
#initialize(attrs = {}) ⇒ Client
Returns a new instance of Client.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/cobro_digital.rb', line 49 def initialize(attrs={}) @id_comercio = attrs[:id_comercio] @sid = attrs[:sid] @client_to_use = attrs[:con_client].to_s.empty? ? CobroDigital::SOAP : attrs[:con_client] # @with_handshake = attrs[:handshake].present? ? attrs[:handshake] : true @pagadores = [] @boletas = [] @transacciones = [] @micrositios = [] @request_xml = nil unless CobroDigital::CLIENTS.include?(@client_to_use) raise ArgumentError, "client_to_use inválido: #{@client_to_use.inspect} (esperado uno de #{CobroDigital::CLIENTS.inspect})" end end |
Instance Attribute Details
#boletas ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def boletas @boletas end |
#client_to_use ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def client_to_use @client_to_use end |
#http_method ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def http_method @http_method end |
#id_comercio ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def id_comercio @id_comercio end |
#micrositios ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def micrositios @micrositios end |
#pagadores ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def pagadores @pagadores end |
#request_xml ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def request_xml @request_xml end |
#requests ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def requests @requests end |
#sid ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def sid @sid end |
#transacciones ⇒ Object
NOTA: sid y request_xml contienen datos sensibles (credencial del
comercio y XML con sid + PII del pagador). No loguear estos accessors.
47 48 49 |
# File 'lib/cobro_digital.rb', line 47 def transacciones @transacciones end |
Instance Method Details
#call(request) ⇒ Object
111 112 113 |
# File 'lib/cobro_digital.rb', line 111 def call(request) send("#{client_to_use}_client", comercio.merge(request)) end |
#comercio ⇒ Object
115 116 117 |
# File 'lib/cobro_digital.rb', line 115 def comercio { 'idComercio' => @id_comercio, 'sid' => @sid, 'handshake' => Digest::MD5.hexdigest(Time.now.to_f.to_s) } end |
#https_client(params) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/cobro_digital.rb', line 89 def https_client(params) case http_method when CobroDigital::Https::POST uri = ::URI.parse(CobroDigital::URI) req = Net::HTTP::Post.new(uri) req.set_form_data(params) when CobroDigital::Https::GET uri = ::URI.parse([CobroDigital::URI, ::URI.encode_www_form(params)].join('?')) req = Net::HTTP::Get.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) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/cobro_digital.rb', line 65 def soap_client(params) # `log: true` para que se sigan registrando errores SOAP/HTTP; la # verbosidad la controla `log_level` (default :error → no loguea el body). # `filters` enmascara el nodo con sid + PII como ***FILTERED*** si algo se # llega a loguear. ADVERTENCIA: con COBRODIGITAL_LOG_LEVEL=debug el XML # formateado incluye el sid en claro — no habilitar debug en producción. client = Savon.client( wsdl: CobroDigital::WSDL, log: true, log_level: CobroDigital::LOG_LEVEL, filters: CobroDigital::LOG_FILTERS, pretty_print_xml: CobroDigital::DEBUG_LOG, open_timeout: CobroDigital::TIMEOUT, read_timeout: CobroDigital::TIMEOUT ) operation = client.operation(:webservice_cobrodigital) request = operation.build(message: { 'parametros_de_entrada' => params.to_json }) # Contrato público: `@request_xml` siempre disponible tras el call. Retiene # el XML con sid + PII en memoria — el consumidor no debe loguearlo. @request_xml = request.pretty client.call(:webservice_cobrodigital, message: { 'parametros_de_entrada' => params.to_json }) end |