retailcrm 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/retailcrm.rb +386 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 628547b65ef69174b1078a72f18fa478ec180215
|
4
|
+
data.tar.gz: eed44d3358dd746f9e865f42e8d7d7948efb0739
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 34f3a694de6fd01e78196ddaae581bcb892d154ea79ceceb28b21478865f1519edb243f2ad70c044f63448b97ae8f16b7e2dcac2ae44e80891bbf67375215e5b
|
7
|
+
data.tar.gz: cae642d7b1444ca4405eaef03673c66cfd42104d44bc8123ac285bf6be4be8ca74f69cde249b120894f262901bd85a4d7485af493f80f9d576463f75a3ba0f9e
|
data/lib/retailcrm.rb
ADDED
@@ -0,0 +1,386 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'net/https'
|
5
|
+
require 'uri'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# RetailCRM API Client
|
9
|
+
class Retailcrm
|
10
|
+
|
11
|
+
def initialize(url, key)
|
12
|
+
@rr_version = 3
|
13
|
+
@rr_url = "#{url}/api/v#{@rr_version}/"
|
14
|
+
@rr_key = key
|
15
|
+
@rr_params = { :apiKey => @rr_key }
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# === Get orders by filter
|
20
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
21
|
+
#
|
22
|
+
# Example:
|
23
|
+
# >> Retailcrm.orders(50, 2, {:email => 'test@example.com', :status => 'new'})
|
24
|
+
# => {...}
|
25
|
+
#
|
26
|
+
# Arguments:
|
27
|
+
# limit (Integer) (20|50|100)
|
28
|
+
# page (Integer)
|
29
|
+
# filter (Array)
|
30
|
+
def orders(filter = {}, limit = 20, page = 1)
|
31
|
+
url = "#{@rr_url}orders"
|
32
|
+
@rr_params[:limit] = limit
|
33
|
+
@rr_params[:page] = page
|
34
|
+
@rr_params[:filter] = filter.to_json
|
35
|
+
return make_request(url)
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# === Get orders by id (or externalId)
|
40
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
41
|
+
#
|
42
|
+
# Example:
|
43
|
+
# >> Retailcrm.orders_get(345, 'id')
|
44
|
+
# => {...}
|
45
|
+
#
|
46
|
+
# Arguments:
|
47
|
+
# id (Integer)
|
48
|
+
# by (String)
|
49
|
+
def orders_get(id, by = 'externalId')
|
50
|
+
url = "#{@rr_url}orders/#{id}"
|
51
|
+
if (by != 'externalId')
|
52
|
+
@rr_params[:by] = by
|
53
|
+
end
|
54
|
+
return make_request(url)
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# === Create order
|
59
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
# >> Retailcrm.orders_create(order)
|
63
|
+
# => {...}
|
64
|
+
#
|
65
|
+
# Arguments:
|
66
|
+
# order (Array)
|
67
|
+
def orders_create(order)
|
68
|
+
url = "#{@rr_url}orders/create"
|
69
|
+
@rr_params[:order] = order.to_json
|
70
|
+
return make_request(url, 'post')
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# === Edit order
|
75
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
76
|
+
#
|
77
|
+
# Example:
|
78
|
+
# >> Retailcrm.orders_edit(order)
|
79
|
+
# => {...}
|
80
|
+
#
|
81
|
+
# Arguments:
|
82
|
+
# order (Array)
|
83
|
+
def orders_edit(order)
|
84
|
+
id = order[:externalId]
|
85
|
+
url = "#{@rr_url}orders/#{id}/edit"
|
86
|
+
@rr_params[:order] = order.to_json
|
87
|
+
return make_request(url, 'post')
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# === Upload orders
|
92
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
93
|
+
#
|
94
|
+
# Example:
|
95
|
+
# >> Retailcrm.orders_upload(orders)
|
96
|
+
# => {...}
|
97
|
+
#
|
98
|
+
# Arguments:
|
99
|
+
# orders (Array)
|
100
|
+
def orders_upload(orders)
|
101
|
+
url = "#{@rr_url}orders/upload"
|
102
|
+
@rr_params[:orders] = orders.to_json
|
103
|
+
result = JSON.parse(make_request(url, 'post'))
|
104
|
+
return result[:uploadedOrders] || result
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# === Set external ids for orders created into CRM
|
109
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
110
|
+
#
|
111
|
+
# Example:
|
112
|
+
# >> Retailcrm.orders_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
|
113
|
+
# => {...}
|
114
|
+
#
|
115
|
+
# Arguments:
|
116
|
+
# orders (Array)
|
117
|
+
def orders_fix_external_ids(orders)
|
118
|
+
url = "#{@rr_url}orders/fix-external-ids"
|
119
|
+
@rr_params[:orders] = orders.to_json
|
120
|
+
return make_request(url, 'post')
|
121
|
+
end
|
122
|
+
|
123
|
+
##
|
124
|
+
# === Get orders history
|
125
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
126
|
+
#
|
127
|
+
# Example:
|
128
|
+
# >> Retailcrm.orders_history('2015-04-10 22:23:12', '2015-04-10 23:33:12')
|
129
|
+
# => {...}
|
130
|
+
#
|
131
|
+
# Arguments:
|
132
|
+
# startDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
|
133
|
+
# endDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
|
134
|
+
# limit (Integer) (20|50|100)
|
135
|
+
# offset (Integer)
|
136
|
+
def orders_history(startDate = nil, endDate = nil, limit = 20, offset = 0)
|
137
|
+
url = "#{@rr_url}orders/history"
|
138
|
+
@rr_params[:startDate] = startDate
|
139
|
+
@rr_params[:endDate] = endDate
|
140
|
+
@rr_params[:limit] = limit
|
141
|
+
@rr_params[:offset] = offset
|
142
|
+
return make_request(url)
|
143
|
+
end
|
144
|
+
|
145
|
+
##
|
146
|
+
# === Get orders statuses
|
147
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
148
|
+
#
|
149
|
+
# Example:
|
150
|
+
# >> Retailcrm.orders_statuses([231,244,356,564])
|
151
|
+
# => {...}
|
152
|
+
#
|
153
|
+
# Arguments:
|
154
|
+
# ids (Array)
|
155
|
+
def orders_statuses(ids)
|
156
|
+
url = "#{@rr_url}orders/statuses/#{ids}"
|
157
|
+
return make_request(url)
|
158
|
+
end
|
159
|
+
|
160
|
+
##
|
161
|
+
# === Get customers by id (or externalId)
|
162
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
163
|
+
#
|
164
|
+
# Example:
|
165
|
+
# >> Retailcrm.customers_get(345, 'id')
|
166
|
+
# => {...}
|
167
|
+
#
|
168
|
+
# Arguments:
|
169
|
+
# id (Integer)
|
170
|
+
# by (String)
|
171
|
+
def customers_get(id, by = 'externalId')
|
172
|
+
url = "#{@rr_url}customers/#{id}"
|
173
|
+
if (by != 'externalId')
|
174
|
+
@rr_params[:by] = by
|
175
|
+
end
|
176
|
+
return make_request(url)
|
177
|
+
end
|
178
|
+
|
179
|
+
##
|
180
|
+
# === Create customer
|
181
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
182
|
+
#
|
183
|
+
# Example:
|
184
|
+
# >> Retailcrm.customer_create(customer)
|
185
|
+
# => {...}
|
186
|
+
#
|
187
|
+
# Arguments:
|
188
|
+
# customer (Array)
|
189
|
+
def customers_create(customer)
|
190
|
+
url = "#{@rr_url}customers/create"
|
191
|
+
@rr_params[:customer] = customer.to_json
|
192
|
+
return make_request(url, 'post')
|
193
|
+
end
|
194
|
+
|
195
|
+
##
|
196
|
+
# === Edit customer
|
197
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
198
|
+
#
|
199
|
+
# Example:
|
200
|
+
# >> Retailcrm.customers_edit(customer)
|
201
|
+
# => {...}
|
202
|
+
#
|
203
|
+
# Arguments:
|
204
|
+
# customer (Array)
|
205
|
+
def customers_edit(customer, id)
|
206
|
+
url = "#{@rr_url}customers/#{id}/edit"
|
207
|
+
@rr_params[:customer] = customer.to_json
|
208
|
+
return make_request(url, 'post')
|
209
|
+
end
|
210
|
+
|
211
|
+
##
|
212
|
+
# === Upload customers
|
213
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
214
|
+
#
|
215
|
+
# Example:
|
216
|
+
# >> Retailcrm.customers_upload(customers)
|
217
|
+
# => {...}
|
218
|
+
#
|
219
|
+
# Arguments:
|
220
|
+
# customers (Array)
|
221
|
+
def customers_upload(customers)
|
222
|
+
url = "#{@rr_url}customers/upload"
|
223
|
+
@rr_params[:customers] = customers.to_json
|
224
|
+
result = JSON.parse(make_request(url, 'post'))
|
225
|
+
return result[:uploaded] || result
|
226
|
+
end
|
227
|
+
|
228
|
+
##
|
229
|
+
# === Set external ids for customers created into CRM
|
230
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
231
|
+
#
|
232
|
+
# Example:
|
233
|
+
# >> Retailcrm.customers_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
|
234
|
+
# => {...}
|
235
|
+
#
|
236
|
+
# Arguments:
|
237
|
+
# customers (Array)
|
238
|
+
def customers_fix_external_ids(customers)
|
239
|
+
url = "#{@rr_url}customers/fix-external-ids"
|
240
|
+
@rr_params[:customers] = customers.to_json
|
241
|
+
return make_request(url, 'post')
|
242
|
+
end
|
243
|
+
|
244
|
+
##
|
245
|
+
# === Get delivery services
|
246
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
247
|
+
#
|
248
|
+
def delivery_services
|
249
|
+
url = "#{@rr_url}reference/delivery-services"
|
250
|
+
return make_request(url)
|
251
|
+
end
|
252
|
+
|
253
|
+
# Get delivery types
|
254
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
255
|
+
#
|
256
|
+
def delivery_types
|
257
|
+
url = "#{@rr_url}reference/delivery-types"
|
258
|
+
return make_request(url)
|
259
|
+
end
|
260
|
+
|
261
|
+
##
|
262
|
+
# === Get order methods
|
263
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
264
|
+
#
|
265
|
+
def order_methods
|
266
|
+
url = "#{@rr_url}reference/order-methods"
|
267
|
+
return make_request(url)
|
268
|
+
end
|
269
|
+
|
270
|
+
##
|
271
|
+
# === Get order types
|
272
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
273
|
+
#
|
274
|
+
def order_types
|
275
|
+
url = "#{@rr_url}reference/order-types"
|
276
|
+
return make_request(url)
|
277
|
+
end
|
278
|
+
|
279
|
+
# Get payment statuses
|
280
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
281
|
+
#
|
282
|
+
def payment_statuses
|
283
|
+
url = "#{@rr_url}reference/payment-statuses"
|
284
|
+
return make_request(url)
|
285
|
+
end
|
286
|
+
|
287
|
+
##
|
288
|
+
# === Get payment types
|
289
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
290
|
+
#
|
291
|
+
def payment_types
|
292
|
+
url = "#{@rr_url}reference/payment-types"
|
293
|
+
return make_request(url)
|
294
|
+
end
|
295
|
+
|
296
|
+
##
|
297
|
+
# === Get product statuses
|
298
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
299
|
+
#
|
300
|
+
def product_statuses
|
301
|
+
url = "#{@rr_url}reference/product-statuses"
|
302
|
+
return make_request(url)
|
303
|
+
end
|
304
|
+
|
305
|
+
# Get sites list
|
306
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
307
|
+
#
|
308
|
+
def sites
|
309
|
+
url = "#{@rr_url}reference/sites"
|
310
|
+
return make_request(url)
|
311
|
+
end
|
312
|
+
|
313
|
+
##
|
314
|
+
# === Get status groups
|
315
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
316
|
+
#
|
317
|
+
def status_groups
|
318
|
+
url = "#{@rr_url}reference/status-groups"
|
319
|
+
return make_request(url)
|
320
|
+
end
|
321
|
+
|
322
|
+
# Get statuses
|
323
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
324
|
+
#
|
325
|
+
def statuses
|
326
|
+
url = "#{@rr_url}reference/statuses"
|
327
|
+
return make_request(url)
|
328
|
+
end
|
329
|
+
|
330
|
+
##
|
331
|
+
# === Get stores
|
332
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
333
|
+
#
|
334
|
+
def stores
|
335
|
+
url = "#{@rr_url}reference/stores"
|
336
|
+
return make_request(url)
|
337
|
+
end
|
338
|
+
|
339
|
+
|
340
|
+
##
|
341
|
+
# === Statistic update
|
342
|
+
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
|
343
|
+
#
|
344
|
+
def statistic_update
|
345
|
+
url = "#{@rr_url}statistic/update"
|
346
|
+
return make_request(url)
|
347
|
+
end
|
348
|
+
|
349
|
+
protected
|
350
|
+
|
351
|
+
def make_request(url, method='get')
|
352
|
+
raise ArgumentError, 'url must be not empty' unless !url.empty?
|
353
|
+
uri = URI.parse(url)
|
354
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
355
|
+
https.use_ssl = true
|
356
|
+
if method == 'post'
|
357
|
+
request = Net::HTTP::Post.new(uri)
|
358
|
+
request.set_form_data(@rr_params)
|
359
|
+
elsif method == 'get'
|
360
|
+
request = Net::HTTP::Get.new(uri.path)
|
361
|
+
request.set_form_data(@rr_params)
|
362
|
+
request = Net::HTTP::Get.new("#{uri.path}?#{request.body}")
|
363
|
+
end
|
364
|
+
response = https.request(request)
|
365
|
+
return Retailcrm::Response.new(response.code, response.body)
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
class Retailcrm::Response
|
370
|
+
def initialize(status, body)
|
371
|
+
@status = status
|
372
|
+
@response = body.empty? ? [] : JSON.parse(body);
|
373
|
+
end
|
374
|
+
|
375
|
+
def get_status
|
376
|
+
return @status
|
377
|
+
end
|
378
|
+
|
379
|
+
def get_response
|
380
|
+
return @response
|
381
|
+
end
|
382
|
+
|
383
|
+
def is_successfull?
|
384
|
+
return @status.to_i < 400
|
385
|
+
end
|
386
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: retailcrm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alex Lushpai
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-13 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Library for interact with RetailCRM API
|
14
|
+
email: lushpai@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/retailcrm.rb
|
20
|
+
homepage: http://rubygems.org/gems/retailcrm
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.2.2
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: RetailCRM Rest API client
|
44
|
+
test_files: []
|