class PayboxDirect::Request

Attributes

fields[R]
http_connection[RW]
http_resp[R]
post_request[R]
response[RW]
vars[R]

Public Class Methods

http_connection(uri) click to toggle source
# File lib/paybox_direct/request.rb, line 89
def self.http_connection(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  return http
end
new(vars, http_conn = nil) click to toggle source
# File lib/paybox_direct/request.rb, line 18
def initialize(vars, http_conn = nil)
  defaults = {
    "VERSION"     => PayboxDirect.config.version.to_s.rjust(5, "0"),
    "SITE"        => PayboxDirect.config.site.to_s.rjust(7, "0"),
    "RANG"        => PayboxDirect.config.rank.to_s.rjust(2, "0"),
    "CLE"         => PayboxDirect.config.password,
    "DATEQ"       => Time.new.utc.strftime("%d%m%Y%H%M%S"),
    "NUMQUESTION" => Time.new.utc.strftime("%H%M%S%L").rjust(10, "0")
  }
  if !PayboxDirect.config.activity.nil?
    defaults["ACTIVITE"] = PayboxDirect.config.activity.to_s.rjust(3, "0")
  end
  if !PayboxDirect.config.bank.nil?
    defaults["ACQUEREUR"] = PayboxDirect.config.bank
  end
  @vars = defaults.merge(vars).merge({
    "URL_ENCODE" => "O"
  })

  @post_request = nil
  @fields = nil
  @http_connection = http_conn
  @response = {}
end
on_request(&block) click to toggle source
# File lib/paybox_direct/request.rb, line 14
def self.on_request(&block)
  @@request_callbacks << block
end
uri(alt = false) click to toggle source
# File lib/paybox_direct/request.rb, line 84
def self.uri(alt = false)
  prod_url = alt ? PayboxDirect::PROD_FALLBACK_URL : PayboxDirect::PROD_URL
  return PayboxDirect.config.is_prod ? prod_url : PayboxDirect::DEV_URL
end

Public Instance Methods

error_code() click to toggle source
# File lib/paybox_direct/request.rb, line 74
def error_code
  raise "Not executed yet" if @fields.nil?
  return @fields["CODEREPONSE"].to_i
end
error_comment() click to toggle source
# File lib/paybox_direct/request.rb, line 79
def error_comment
  raise "Not executed yet" if @fields.nil?
  return @fields["COMMENTAIRE"]
end
execute!() click to toggle source

Executes the POST request on the Paybox server.

Raises:

# File lib/paybox_direct/request.rb, line 47
def execute!
  use_alt = false
  begin
    resp = run_http_post!(self.class.uri(use_alt))
    raise PayboxDirect::ServerUnavailableError if resp.code != "200"
    @fields = Rack::Utils.parse_query(resp.body)
    if !@fields.has_key?("CODEREPONSE") or @fields["CODEREPONSE"] == "00001"
      raise PayboxDirect::ServerUnavailableError
    end
  rescue PayboxDirect::ServerUnavailableError => e
    raise e if use_alt or !PayboxDirect.config.is_prod
    use_alt = true
    sleep 1
    retry
  end
end
failed?() click to toggle source
# File lib/paybox_direct/request.rb, line 64
def failed?
  raise "Not executed yet" if @fields.nil?
  return @fields["CODEREPONSE"] != "00000"
end
request_id() click to toggle source
# File lib/paybox_direct/request.rb, line 69
def request_id
  raise "Not executed yet" if @fields.nil?
  return @fields["NUMAPPEL"].to_i
end

Private Instance Methods

run_http_post!(uri) click to toggle source
# File lib/paybox_direct/request.rb, line 97
def run_http_post!(uri)
  @http_connection ||= self.class.http_connection(uri)
  @post_request = Net::HTTP::Post.new(uri.request_uri)
  @post_request.set_form_data(@vars)
  begin
    @http_resp = @http_connection.request(@post_request)
  rescue
    raise PayboxDirect::ServerUnavailableError
  end
  @@request_callbacks.each{ |proc| proc.call(self) }
  return @http_resp
end