Sha256: e81dd7c4ed6b3357d69bf4fb0712fe7a98f503b026bdc9ef89f0be476385184e

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

require 'net/http'
require 'net/https'
require 'uri'
require 'payone_connect/core_ext'

class PayoneConnect
  attr_reader :request_data, :request_header
  def initialize(api_url, data)
    @api_url = URI.parse(api_url)
    @request_data = process_data(data)
    @request_header = {'Content-Type'=> 'application/x-www-form-urlencoded'}
  end

  def request
    http = Net::HTTP.new(@api_url.host, @api_url.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    handle_response(http.post(@api_url.path, @request_data,@request_header))
  end
  
  protected
  
  def handle_response(http_response)
    return nil if http_response.body.blank?
    response = {}
    http_response.body.split("\n").each do |param|
      key,value = param.scan(/([^=]+)=(.+)/).first
      response[key.to_sym] = value
    end
    response
  end
  
  def process_data(data)
    data.stringify_keys!
    %w(mid portalid key mode).each do |required_field|
      raise "Payone API Setup Data not complete: #{required_field.upcase} was blank" if data[required_field].blank?
    end
    post_data = []
    data.each do |key,value|
      if value.is_a?(Hash)
        value.each do |nested_key, nested_value|
          post_data << "#{key.to_s}[#{nested_key.to_s}]=#{URI.encode(nested_value.to_s)}"
        end
      else
          post_data << "#{key.to_s}=#{URI.encode(value.to_s)}"
      end
    end
    post_data.join("&")
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
payone_connect-0.1.2 lib/payone_connect.rb