api-client-ruby/lib/retailcrm.rb

387 lines
9.9 KiB
Ruby
Raw Normal View History

2015-04-13 03:14:25 +03:00
# encoding: utf-8
require 'net/http'
require 'net/https'
require 'uri'
require 'json'
# RetailCRM API Client
class Retailcrm
def initialize(url, key)
@rr_version = 3
@rr_url = "#{url}/api/v#{@rr_version}/"
@rr_key = key
@rr_params = { :apiKey => @rr_key }
end
##
# === Get orders by filter
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders(50, 2, {:email => 'test@example.com', :status => 'new'})
# => {...}
#
# Arguments:
# limit (Integer) (20|50|100)
# page (Integer)
# filter (Array)
def orders(filter = {}, limit = 20, page = 1)
url = "#{@rr_url}orders"
@rr_params[:limit] = limit
@rr_params[:page] = page
@rr_params[:filter] = filter.to_json
return make_request(url)
end
##
# === Get orders by id (or externalId)
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_get(345, 'id')
# => {...}
#
# Arguments:
# id (Integer)
# by (String)
def orders_get(id, by = 'externalId')
url = "#{@rr_url}orders/#{id}"
if (by != 'externalId')
@rr_params[:by] = by
end
return make_request(url)
end
##
# === Create order
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_create(order)
# => {...}
#
# Arguments:
# order (Array)
def orders_create(order)
url = "#{@rr_url}orders/create"
@rr_params[:order] = order.to_json
return make_request(url, 'post')
end
##
# === Edit order
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_edit(order)
# => {...}
#
# Arguments:
# order (Array)
def orders_edit(order)
id = order[:externalId]
url = "#{@rr_url}orders/#{id}/edit"
@rr_params[:order] = order.to_json
return make_request(url, 'post')
end
##
# === Upload orders
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_upload(orders)
# => {...}
#
# Arguments:
# orders (Array)
def orders_upload(orders)
url = "#{@rr_url}orders/upload"
@rr_params[:orders] = orders.to_json
result = JSON.parse(make_request(url, 'post'))
return result[:uploadedOrders] || result
end
##
# === Set external ids for orders created into CRM
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
# => {...}
#
# Arguments:
# orders (Array)
def orders_fix_external_ids(orders)
url = "#{@rr_url}orders/fix-external-ids"
@rr_params[:orders] = orders.to_json
return make_request(url, 'post')
end
##
# === Get orders history
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_history('2015-04-10 22:23:12', '2015-04-10 23:33:12')
# => {...}
#
# Arguments:
# startDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
# endDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
# limit (Integer) (20|50|100)
# offset (Integer)
def orders_history(startDate = nil, endDate = nil, limit = 20, offset = 0)
url = "#{@rr_url}orders/history"
@rr_params[:startDate] = startDate
@rr_params[:endDate] = endDate
@rr_params[:limit] = limit
@rr_params[:offset] = offset
return make_request(url)
end
##
# === Get orders statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_statuses([231,244,356,564])
# => {...}
#
# Arguments:
# ids (Array)
def orders_statuses(ids)
url = "#{@rr_url}orders/statuses/#{ids}"
return make_request(url)
end
##
# === Get customers by id (or externalId)
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_get(345, 'id')
# => {...}
#
# Arguments:
# id (Integer)
# by (String)
def customers_get(id, by = 'externalId')
url = "#{@rr_url}customers/#{id}"
if (by != 'externalId')
@rr_params[:by] = by
end
return make_request(url)
end
##
# === Create customer
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customer_create(customer)
# => {...}
#
# Arguments:
# customer (Array)
def customers_create(customer)
url = "#{@rr_url}customers/create"
@rr_params[:customer] = customer.to_json
return make_request(url, 'post')
end
##
# === Edit customer
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_edit(customer)
# => {...}
#
# Arguments:
# customer (Array)
def customers_edit(customer, id)
url = "#{@rr_url}customers/#{id}/edit"
@rr_params[:customer] = customer.to_json
return make_request(url, 'post')
end
##
# === Upload customers
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_upload(customers)
# => {...}
#
# Arguments:
# customers (Array)
def customers_upload(customers)
url = "#{@rr_url}customers/upload"
@rr_params[:customers] = customers.to_json
result = JSON.parse(make_request(url, 'post'))
return result[:uploaded] || result
end
##
# === Set external ids for customers created into CRM
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
# => {...}
#
# Arguments:
# customers (Array)
def customers_fix_external_ids(customers)
url = "#{@rr_url}customers/fix-external-ids"
@rr_params[:customers] = customers.to_json
return make_request(url, 'post')
end
##
# === Get delivery services
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def delivery_services
url = "#{@rr_url}reference/delivery-services"
return make_request(url)
end
# Get delivery types
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def delivery_types
url = "#{@rr_url}reference/delivery-types"
return make_request(url)
end
##
# === Get order methods
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def order_methods
url = "#{@rr_url}reference/order-methods"
return make_request(url)
end
##
# === Get order types
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def order_types
url = "#{@rr_url}reference/order-types"
return make_request(url)
end
# Get payment statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def payment_statuses
url = "#{@rr_url}reference/payment-statuses"
return make_request(url)
end
##
# === Get payment types
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def payment_types
url = "#{@rr_url}reference/payment-types"
return make_request(url)
end
##
# === Get product statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def product_statuses
url = "#{@rr_url}reference/product-statuses"
return make_request(url)
end
# Get sites list
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def sites
url = "#{@rr_url}reference/sites"
return make_request(url)
end
##
# === Get status groups
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def status_groups
url = "#{@rr_url}reference/status-groups"
return make_request(url)
end
# Get statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def statuses
url = "#{@rr_url}reference/statuses"
return make_request(url)
end
##
# === Get stores
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def stores
url = "#{@rr_url}reference/stores"
return make_request(url)
end
##
# === Statistic update
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def statistic_update
url = "#{@rr_url}statistic/update"
return make_request(url)
end
protected
def make_request(url, method='get')
raise ArgumentError, 'url must be not empty' unless !url.empty?
uri = URI.parse(url)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
if method == 'post'
request = Net::HTTP::Post.new(uri)
request.set_form_data(@rr_params)
elsif method == 'get'
request = Net::HTTP::Get.new(uri.path)
request.set_form_data(@rr_params)
request = Net::HTTP::Get.new("#{uri.path}?#{request.body}")
end
response = https.request(request)
return Retailcrm::Response.new(response.code, response.body)
end
end
class Retailcrm::Response
def initialize(status, body)
@status = status
@response = body.empty? ? [] : JSON.parse(body);
end
def get_status
return @status
end
def get_response
return @response
end
def is_successfull?
return @status.to_i < 400
end
end