Class: Pesapal::OrderUrl

Inherits:
Object
  • Object
show all
Defined in:
lib/mobile-money/pesapal/order_url.rb

Constant Summary collapse

HTTP_METHOD =
'get'
API_ACTION =
'/API/PostPesapalDirectOrderV4'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(post_data_xml, callback_url, test = true) ⇒ OrderUrl

Returns a new instance of OrderUrl.



14
15
16
17
18
19
# File 'lib/mobile-money/pesapal/order_url.rb', line 14

def initialize(post_data_xml, callback_url, test=true)
  @post_data_xml   = post_data_xml
  @callback_url    = callback_url
  @token           = nil
  @test            = test
end

Instance Attribute Details

#callback_urlObject (readonly)

Returns the value of attribute callback_url.



9
10
11
# File 'lib/mobile-money/pesapal/order_url.rb', line 9

def callback_url
  @callback_url
end

#post_data_xmlObject (readonly)

Returns the value of attribute post_data_xml.



9
10
11
# File 'lib/mobile-money/pesapal/order_url.rb', line 9

def post_data_xml
  @post_data_xml
end

#testObject (readonly)

Returns the value of attribute test.



9
10
11
# File 'lib/mobile-money/pesapal/order_url.rb', line 9

def test
  @test
end

#tokenObject (readonly)

Returns the value of attribute token.



9
10
11
# File 'lib/mobile-money/pesapal/order_url.rb', line 9

def token
  @token
end

Instance Method Details

#api_domainObject



21
22
23
# File 'lib/mobile-money/pesapal/order_url.rb', line 21

def api_domain
  test ? 'http://demo.pesapal.com' : 'https://www.pesapal.com'
end

#consumerObject



29
30
31
32
33
34
35
36
37
# File 'lib/mobile-money/pesapal/order_url.rb', line 29

def consumer
  @consumer ||= begin
    OAuth::Consumer.new(consumer_key, consumer_secret, {
        site: api_domain,
        http_method: HTTP_METHOD,
        scheme: :query_string
    })
  end
end

#consumer_keyObject



39
40
41
# File 'lib/mobile-money/pesapal/order_url.rb', line 39

def consumer_key
  Rails.application.secrets.pesapal_consumer_key
end

#consumer_secretObject



43
44
45
# File 'lib/mobile-money/pesapal/order_url.rb', line 43

def consumer_secret
  Rails.application.secrets.pesapal_consumer_secret
end

#escaped_xmlObject



71
72
73
# File 'lib/mobile-money/pesapal/order_url.rb', line 71

def escaped_xml
  HTMLEntities.new.encode(post_data_xml)
end

#paramsObject



56
57
58
59
60
61
# File 'lib/mobile-money/pesapal/order_url.rb', line 56

def params
  @params ||= {
      'oauth_callback'       => callback_url,
      'pesapal_request_data' => escaped_xml,
  }
end

#params_to_stringObject



63
64
65
66
67
68
69
# File 'lib/mobile-money/pesapal/order_url.rb', line 63

def params_to_string
  strings = []
  params.each do |key, value|
    strings << "#{key}=#{ERB::Util.url_encode(value)}"
  end
  strings.join('&')
end

#request_urlObject



51
52
53
# File 'lib/mobile-money/pesapal/order_url.rb', line 51

def request_url
  API_ACTION + "?" + params_to_string
end

#signed_requestObject



47
48
49
# File 'lib/mobile-money/pesapal/order_url.rb', line 47

def signed_request
  consumer.create_signed_request HTTP_METHOD, request_url, nil, {}, params
end

#urlObject



25
26
27
# File 'lib/mobile-money/pesapal/order_url.rb', line 25

def url
  "#{api_domain}#{signed_request.path}"
end