class Lifecell::API

Constants

VERSION

Attributes

log[RW]

Default logger for all Lifecell::API instances

Lifecell::API.log = Logger.new($stderr)
log[W]

Sets the logger used by this instance of Lifecell::API

sub_id[RW]
token[RW]

Public Class Methods

new(params = {}) click to toggle source

Create a new API object using the given parameters.

Required parameters

  • :msisdn - telephone number in format '38063*******'

  • :password - super password

  • :lang - 'uk', 'ru' or 'en'

# File lib/lifecell_api.rb, line 78
def initialize(params = {})
  @msisdn   = params.delete(:msisdn)
  @password = params.delete(:password)
  @lang     = params.delete(:lang) || 'uk'

  @log = nil

  @os_type = 'ANDROID'

  @api_url         = 'https://api.life.com.ua/mobile/'
  @access_key_code = '7'
  @application_key = 'E6j_$4UnR_)0b'
end

Public Instance Methods

available_tariffs() click to toggle source
# File lib/lifecell_api/methods.rb, line 88
def available_tariffs
  request(
    'getAvailableTariffs',
    base_api_parameters
  )
end
balances() click to toggle source
# File lib/lifecell_api/methods.rb, line 95
def balances
  request(
    'getBalances',
    base_api_parameters
  )
end
call_me_back(msisdn_b) click to toggle source
# File lib/lifecell_api/methods.rb, line 116
def call_me_back(msisdn_b)
  request(
    'callMeBack',
    base_api_parameters.merge(msisdnB: msisdn_b)
  )
end
change_language(new_language_id) click to toggle source
# File lib/lifecell_api/methods.rb, line 109
def change_language(new_language_id)
  request(
    'changeLanguage',
    base_api_parameters.merge(newLanguageId: new_language_id)
  )
end
change_super_password(old_password, new_password) click to toggle source
# File lib/lifecell_api/methods.rb, line 48
def change_super_password(old_password, new_password)
  request(
    'changeSuperPassword',
    base_api_parameters.merge(
      oldPassword: old_password,
      newPassword: new_password
    )
  )
end
expenses_summary(month_period) click to toggle source

Summary expenses report for calendar month month_period

month_period - A string like 'yyyy-MM' that represent month of year

# File lib/lifecell_api/methods.rb, line 145
def expenses_summary(month_period)
  request(
    'getExpensesSummary',
    base_api_parameters.merge(monthPeriod: month_period)
  )
end
languages() click to toggle source
# File lib/lifecell_api/methods.rb, line 102
def languages
  request(
    'getLanguages',
    base_api_parameters
  )
end
log() click to toggle source

The current logger. If no logger has been set Lifecell::API.log is used.

# File lib/lifecell_api.rb, line 94
def log
  @log ||= Lifecell::API.log
end
payments_history(month_period) click to toggle source

Payments history for calendar month month_period

month_period - A string like 'yyyy-MM' that represent month of year

# File lib/lifecell_api/methods.rb, line 134
def payments_history(month_period)
  request(
    'getPaymentsHistory',
    base_api_parameters.merge(monthPeriod: month_period)
  )
end
refill_balance_by_scratch_card(secret_code) click to toggle source
# File lib/lifecell_api/methods.rb, line 152
def refill_balance_by_scratch_card(secret_code)
  request(
    'refillBalanceByScratchCard',
    base_api_parameters.merge(secretCode: secret_code)
  )
end
request(method, params = {}) click to toggle source
# File lib/lifecell_api.rb, line 102
def request(method, params = {})
  params = { accessKeyCode: @access_key_code }.merge(params)
  url = create_signed_url(method, params)

  log&.debug("[#{method}] request: #{url}")

  response = response(url)

  raise StatusError, "Received status code #{response.code} from server" unless response.code == '200'

  log&.debug("[#{method}] response: #{response.body}")

  xml = parse_xml(response.body)
  return xml if xml['responseCode'] == '0'

  raise_error!(xml)
end
request_balance_transfer(msisdn_b) click to toggle source
# File lib/lifecell_api/methods.rb, line 123
def request_balance_transfer(msisdn_b)
  request(
    'requestBalanceTransfer',
    base_api_parameters.merge(msisdnB: msisdn_b)
  )
end
services() click to toggle source
# File lib/lifecell_api/methods.rb, line 84
def services
  request('getServices', base_api_parameters)
end
sign_in() click to toggle source
# File lib/lifecell_api/methods.rb, line 33
def sign_in
  xml = request('signIn', msisdn: @msisdn, superPassword: @password)
  @token = xml['token']
  @sub_id = xml['subId']
  xml
end
sign_out() click to toggle source
# File lib/lifecell_api/methods.rb, line 40
def sign_out
  request(
    'signOut',
    msisdn: @msisdn,
    subId: @sub_id
  )
end
summary_data() click to toggle source
# File lib/lifecell_api/methods.rb, line 77
def summary_data
  request(
    'getSummaryData',
    base_api_parameters
  )
end
ui_properties(language_id, last_date_update) click to toggle source

last_date_update is DateTime object

# File lib/lifecell_api/methods.rb, line 67
def ui_properties(language_id, last_date_update)
  request(
    'getUIProperties',
    accessKeyCode: @access_key_code,
    languageId: language_id,
    osType: @os_type,
    lastDateUpdate: last_date_update
  )
end

Private Instance Methods

base_api_parameters() click to toggle source
# File lib/lifecell_api.rb, line 170
def base_api_parameters
  { msisdn: @msisdn, languageId: @lang, osType: @os_type, token: @token }
end
create_param(params) click to toggle source

Returns a string representation of the receiver suitable for use as a URL query string

# File lib/lifecell_api.rb, line 155
def create_param(params)
  params.map do |key, value|
    "#{urlencode(key)}=#{urlencode(value)}"
  end.sort * '&'
end
create_signed_url(method, params) click to toggle source
# File lib/lifecell_api.rb, line 139
def create_signed_url(method, params)
  query = create_param(params)
  str = method + '?' + query + '&signature='

  digest = OpenSSL::Digest.new('sha1')
  hash = OpenSSL::HMAC.digest(digest, @application_key, str)

  hash = Base64.encode64(hash).chomp

  str += urlencode(hash)

  @api_url + str
end
parse_xml(str) click to toggle source
# File lib/lifecell_api.rb, line 166
def parse_xml(str)
  XmlSimple.xml_in(str, 'ForceArray' => false)
end
raise_error!(xml) click to toggle source
# File lib/lifecell_api.rb, line 122
def raise_error!(xml)
  raise MethodError, "Unknown error: #{xml}" unless xml['responseCode']

  error_message = Lifecell::RESPONSE_CODES[xml['responseCode']]
  error_message ||= "Unknown error code #{xml['responseCode']}"
  raise MethodError, error_message
end
response(url) click to toggle source
# File lib/lifecell_api.rb, line 130
def response(url)
  uri = URI(url)
  request = Net::HTTP::Get.new(uri.request_uri)

  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    http.request(request)
  end
end
urlencode(str) click to toggle source

URL-encode a string

# File lib/lifecell_api.rb, line 162
def urlencode(str)
  CGI.escape(str.to_s)
end