class AmoCRM::Client

Constants

PREFIX_PATH
SESSION_TIMEOUT

Attributes

connection[R]

Public Class Methods

new(url: @connection = Faraday.new url) click to toggle source
# File lib/amo_crm/client.rb, line 12
def initialize url:
  @connection = Faraday.new url
  # 'private/api/v2/json/'
  # connection.use :cookie_jar
  # connection.response :logger
  connection.request :url_encoded
end

Public Instance Methods

authorize(user_login: , user_hash: ) click to toggle source
# File lib/amo_crm/client.rb, line 20
def authorize(user_login: , user_hash: )
  logger.debug "Client: Authorize #{user_login}"
  path = "private/api/auth.php?type=json"
  data = { USER_LOGIN: user_login, USER_HASH: user_hash }
  @user_login = user_login
  @user_hash = user_hash
  response = connection.post path, data
  # Success reponse header example:
  # "set-cookie"=> "session_id=nic2a7t2mauuooc8a45pbm3p85nlf1nm9tr4cltpfl3r5kfk4um0; path=/; domain=.amocrm.ru, BITRIX_SM_LOGIN=danil%40brandymint.ru; expires=Thu, 26-Aug-2021 13:34:47 GMT; Max-
  # "expires"=>"Thu, 19 Nov 1981 08:52:00 GMT",
  #
  # Success response body example:
  # "{\"response\":{\"auth\":true,\"accounts\":[{\"id\":\"11413681\",\"name\":\"Kiosk\",\"subdomain\":\"kiosk\",\"language\":\"ru\",\"timezone\":\"Europe\\/Moscow\"}],\"server_time\":1474464887}}"
  @authorized_at = Time.zone.now
  @cookie = response.headers['set-cookie']
  logger.debug "Client: Authorization response #{response.body}"
  validate response
end
authorize!(user_login: , user_hash: ) click to toggle source
# File lib/amo_crm/client.rb, line 39
def authorize!(user_login: , user_hash: )
  res = authorize user_login: user_login, user_hash: user_hash
  raise "AmoCRM is not authorized #{res}" unless res.auth

  res
end
delete(path) click to toggle source
# File lib/amo_crm/client.rb, line 66
def delete path
  check_authorization!
  validate connection.delete PREFIX_PATH path
end
get(path, params={}) click to toggle source
# File lib/amo_crm/client.rb, line 46
def get path, params={}
  logger.debug "Client: GET #{path} #{params}"
  check_authorization!
  validate connection.get PREFIX_PATH + path, params, { Cookie: cookie }
end
post(path, data=nil) click to toggle source
# File lib/amo_crm/client.rb, line 52
def post path, data=nil
  data = JSON.generate data.as_json
  logger.debug "Client: POST #{path}: #{data}"
  check_authorization!
  validate connection.post PREFIX_PATH + path, data, { 'Content-Type' => 'application/json', Cookie: cookie }
end
put(path, data) click to toggle source
# File lib/amo_crm/client.rb, line 59
def put path, data
  data = JSON.generate data.as_json
  logger.debug "Client: PUT #{path}: #{data}"
  check_authorization!
  validate connection.put PREFIX_PATH + path, data, { 'Content-Type' => 'application/json', Cookie: cookie }
end

Private Instance Methods

check_authorization!() click to toggle source
# File lib/amo_crm/client.rb, line 75
def check_authorization!
  return true unless session_expired?
  raise 'No user_login to reauthorize' unless @user_login
  res = authorize user_login: @user_login, user_hash: @user_hash
  raise "AmoCRM is not reauthorized #{res}" unless res.auth

  res
end
logger() click to toggle source
# File lib/amo_crm/client.rb, line 88
def logger
  AmoCRM.logger
end
session_expired?() click to toggle source
# File lib/amo_crm/client.rb, line 84
def session_expired?
  return !cookie || !@authorized_at || @authorized_at + SESSION_TIMEOUT <= Time.zone.now
end
validate(res) click to toggle source
# File lib/amo_crm/client.rb, line 92
def validate res
  AmoCRM::Client::Errors.build res unless res.status == 200

  data = JSON.parse(res.body)['response']
  Hashie::Mash.new data
end