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:¶ ↑
-
PayboxDirect::ServerUnavailableError
, if Paybox server is unavailable
# 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