Class: MpesaConnect::AccessToken

Inherits:
Object
  • Object
show all
Defined in:
lib/mpesa_connect/access_token.rb

Instance Method Summary collapse

Constructor Details

#initialize(key, secret) ⇒ AccessToken

Returns a new instance of AccessToken.



6
7
8
9
10
11
12
# File 'lib/mpesa_connect/access_token.rb', line 6

def initialize key, secret
  @key = key
  @secret = secret
  @redis = Redis.new

  load_from_redis
end

Instance Method Details

#access_tokenObject



46
47
48
49
50
51
52
53
# File 'lib/mpesa_connect/access_token.rb', line 46

def access_token
  if is_valid?
    return @token
  else
    refresh
    return @token
  end
end

#get_new_access_tokenObject



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mpesa_connect/access_token.rb', line 55

def get_new_access_token
  encode = encode_credentials @key, @secret
  headers = {
    "Authorization" => "Basic #{encode}"
  }
  url = "https://sandbox.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials"
  response = HTTParty.get(url, headers: headers)

  hash = JSON.parse(response.body).merge(Hash['time_stamp',Time.now.to_i])
  @redis.set @key, hash.to_json
end

#has_token?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/mpesa_connect/access_token.rb', line 23

def has_token?
  return !@token.nil?
end

#is_valid?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/mpesa_connect/access_token.rb', line 14

def is_valid?
  has_token? && !token_expired?
end

#load_from_redisObject



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/mpesa_connect/access_token.rb', line 32

def load_from_redis
  data = @redis.get(@key)
  if (data.nil? || data.empty?)
    @token = nil
    @timestamp = nil
    @expires_in = nil
  else
    parsed = JSON.parse(data)
    @token = parsed['access_token']
    @timestamp = parsed['time_stamp']
    @expires_in = parsed['expires_in']
  end
end

#refreshObject



27
28
29
30
# File 'lib/mpesa_connect/access_token.rb', line 27

def refresh
  get_new_access_token
  load_from_redis
end

#token_expired?Boolean

Returns:

  • (Boolean)


18
19
20
21
# File 'lib/mpesa_connect/access_token.rb', line 18

def token_expired?
  expire_time = @timestamp.to_i + @expires_in.to_i
  return expire_time < Time.now.to_i + 58
end