class MpesaStk::AccessToken

Public Class Methods

call(key = nil, secret = nil) click to toggle source
# File lib/mpesa_stk/access_token.rb, line 7
def call(key = nil, secret = nil)
  new(key, secret).access_token
end
new(key = nil, secret = nil) click to toggle source
# File lib/mpesa_stk/access_token.rb, line 12
def initialize(key = nil, secret = nil)
  @key = key.nil? ? ENV['key'] : key
  @secret = secret.nil? ? ENV['secret'] : secret
  @redis = Redis.new

  load_from_redis
end

Public Instance Methods

access_token() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 52
def access_token
  if is_valid?
    return @token
  else
    refresh
    return @token
  end
end
get_new_access_token() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 61
def get_new_access_token
  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?() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 29
def has_token?
  return !@token.nil?
end
is_valid?() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 20
def is_valid?
  has_token? && !token_expired?
end
load_from_redis() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 38
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
refresh() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 33
def refresh
  get_new_access_token
  load_from_redis
end
token_expired?() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 24
def token_expired?
  expire_time = @timestamp.to_i + @expires_in.to_i
  return expire_time < Time.now.to_i + 58
end

Private Instance Methods

encode_credentials(key, secret) click to toggle source
# File lib/mpesa_stk/access_token.rb, line 81
def encode_credentials key, secret
  credentials = "#{key}:#{secret}"
  Base64.encode64(credentials).split("\n").join
end
headers() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 74
def headers
  encode = encode_credentials @key, @secret
  {
    "Authorization" => "Basic #{encode}"
  }
end
url() click to toggle source
# File lib/mpesa_stk/access_token.rb, line 70
def url
  "#{ENV['base_url']}#{ENV['token_generator_url']}"
end