cdek_client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 15fcbc12e006547dd670ca956ea8243f5c82a5a7
4
+ data.tar.gz: 796b4e67d5b46f5addcdfc4ed4ba8bda19665932
5
+ SHA512:
6
+ metadata.gz: cc2fa9316e0f181f9da9ead23871f65f7cc1900c5b9610abc70a96ae7755cacef1d010439240200be363485b826567997201e9686d6af8e1bb93e09f24910dfe
7
+ data.tar.gz: 069c8a3411dd1b539c2423b5b3432160ca7816069617d29602f1db5552d23bfa97b2faf88bc8f943788a204f12afa87390e3b02ea68be8c0ddc0bd66fbb527b8
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in cdek_api_client.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 bob-frost
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,418 @@
1
+ # CdekClient
2
+
3
+ Ruby клиент для API службы доставки СДЭК ([www.edostavka.com](http://www.edostavka.com)).
4
+
5
+ ## Установка
6
+
7
+ Добавить в Gemfile:
8
+
9
+ gem 'cdek_client'
10
+
11
+ И выполнить:
12
+
13
+ $ bundle
14
+
15
+ Или установить вручную:
16
+
17
+ $ gem install cdek_client
18
+
19
+ ## Начало работы
20
+
21
+ Создать инстанс класса `CdekClient::Client`:
22
+
23
+ ```ruby
24
+ client = CdekClient::Client.new ВАШ_ЛОГИН, ВАШ_ПАРОЛЬ
25
+ ```
26
+
27
+ Вызовы возвращают объект класса `CdekClient::Result`. Результат хранится в атрибуте `data`, ошибки (если присутствуют) в `errors`. Полный результат запроса ([HTTParty](https://github.com/jnunemaker/httparty)) можно получить из атрибута `response`. Например:
28
+
29
+ ```ruby
30
+ result = client.pickup_points cityid: 44
31
+ result.errors.any? # => false
32
+ result.data.length # => 20
33
+ result.data.each do |pickup_point|
34
+ puts "#{pickup_point[:Code]} #{pickup_point[:Name]}"
35
+ end
36
+
37
+ result = client.pickup_points cityid: 9999
38
+ result.data.length # => 0
39
+ result.errors.inspect # => [#<CdekClient::PvzNotfoundError>]
40
+ ```
41
+
42
+ ## Ошибки
43
+
44
+ Классы ошибок наследуют от `CdekClient::Error`:
45
+
46
+ * StandardError
47
+ * CdekClient::Error
48
+ * CdekClient::ResponseError
49
+ * CdekClient::APIError
50
+ * CdekClient::AttributeEmptyError
51
+ * CdekClient::AuthError
52
+ * CdekClient::BarcodeDublError
53
+ * etc ...
54
+ * CdekClient::Calculator::Error
55
+ * CdekClient::Calculator::APIError
56
+ * CdekClient::Calculator::ApiVersionError
57
+ * CdekClient::Calculator::AuthError
58
+ * CdekClient::Calculator::DeliveryImpossibleError
59
+ * etc ...
60
+
61
+ Например:
62
+
63
+ ```ruby
64
+ # CdekClient::ResponseError
65
+ error.code # => 500
66
+ error.message # => internal server error
67
+
68
+ # Дочерние классы CdekClient::APIError
69
+ error.class # => CdekClient::AttributeEmptyError
70
+ error.code # => ERR_ATTRIBUTE_EMPTY
71
+ error.message # => Не задано значение атрибута:NUMBER
72
+
73
+ # Дочерние классы CdekClient::Calculator::APIError
74
+ error.class # => CdekClient::Calculator::DeliveryImpossibleError
75
+ error.code # => 3
76
+ error.message # => Невозможно осуществить доставку по этому направлению при заданных условиях
77
+ ```
78
+
79
+ Для получения полного списка ошибок API ознакомьтесь с [официальной документацией к API](http://www.edostavka.ru/clients/integrator.html). Список классов ошибок можно найти в [lib/cdek_client/errors.rb](lib/cdek_client/errors.rb) и [lib/cdek_client/calculator_errors.rb](lib/cdek_client/calculator_errors.rb ).
80
+
81
+ ## Методы
82
+
83
+ Для получения детальной информации о формате передаваемых и возвращаемых данных ознакомьтесь с [официальной документацией к API](http://www.edostavka.ru/clients/integrator.html).
84
+
85
+ Даты и время можно передавать как объекты класса `Date` и `Time`, так и как строки в форматах `%Y-%m-%d` и `%Y-%m-%dT%H:%M:%S`.
86
+
87
+ #### Список пунктов самовывоза
88
+
89
+ ```ruby
90
+ client.pickup_points
91
+ client.pickup_points filter_params
92
+ ```
93
+
94
+ Формат параметров:
95
+
96
+ ```ruby
97
+ {
98
+ cityid: 44,
99
+ citypostcode: 656065
100
+ }
101
+ ```
102
+
103
+ #### Список заказов на доставку
104
+
105
+ ```ruby
106
+ client.new_orders params
107
+ ```
108
+
109
+ Формат параметров:
110
+
111
+ ```ruby
112
+ {
113
+ Number: 'Номер акта приема-передачи',
114
+ Order: [
115
+ {
116
+ Number: 'Номер отправления клиента',
117
+ SendCityCode: 16196,
118
+ RecCityCode: 270,
119
+ RecipientName: 'John Doe',
120
+ Phone: '123-456-789',
121
+ TariffTypeCode: 1,
122
+ # etc ...
123
+ Address: {
124
+ Street: 'Некая улица',
125
+ House: '123',
126
+ Flat: '456'
127
+ PvzCode: 'ABC123'
128
+ },
129
+ Package: [
130
+ {
131
+ Number: 'Номер упаковки',
132
+ Barcode: 'Штрих-код упаковки',
133
+ Weight: 10,
134
+ SizeA: 100,
135
+ SizeB: 100,
136
+ SizeC: 100,
137
+ Item: [
138
+ {
139
+ WareKey: 'Артикул товара',
140
+ Cost: 100,
141
+ Payment: 0,
142
+ Weight: 1,
143
+ Amount: 1,
144
+ Comment: 'Наименование товара'
145
+ },
146
+ {
147
+ WareKey: 'Артикул товара 2'
148
+ # etc ...
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ Number: 'Номер упаковки 2'
154
+ # etc ...
155
+ }
156
+ ],
157
+ AddService: {
158
+ ServiceCode: 2
159
+ }
160
+ },
161
+ {
162
+ Number: 'Номер отправления 2'
163
+ # etc ...
164
+ }
165
+ ]
166
+ }
167
+ ```
168
+
169
+ Параметры `Order`, `Package` и `Item` могут быть хешем или массивом хешей, т.е.:
170
+
171
+ ```ruby
172
+ Order: { }
173
+ # или
174
+ Order: [{}, {}, ...]
175
+ ```
176
+
177
+ #### Прозвон получателя
178
+
179
+ ```ruby
180
+ client.new_schedule params
181
+ ```
182
+
183
+ Формат параметров:
184
+
185
+ ```ruby
186
+ {
187
+ Order: [
188
+ {
189
+ DispatchNumber: 'Номер отправления СДЭК',
190
+ Number: 'Номер отправления клиента',
191
+ Date: Date.today,
192
+ Attempt: {
193
+ Date: Date.today,
194
+ RecipientName: 'John Doe',
195
+ # etc ...
196
+ Address: {
197
+ Street: 'Некая улица',
198
+ House: '123',
199
+ Flat: '456',
200
+ # etc ...
201
+ Package: [
202
+ {
203
+ Number: 'Номер упаковки',
204
+ Item: [
205
+ {
206
+ WareKey: 'Артикул товара',
207
+ Payment: 100
208
+ },
209
+ {
210
+ WareKey: 'Артикул товара 2'
211
+ Payment: 200
212
+ },
213
+ # etc ...
214
+ ]
215
+ },
216
+ {
217
+ Number: 'Номер упаковки 2',
218
+ # etc ...
219
+ },
220
+ # etc ...
221
+ ]
222
+ }
223
+ }
224
+ },
225
+ {
226
+ DispatchNumber: 'Номер отправления СДЭК 2',
227
+ # etc ...
228
+ },
229
+ # etc ...
230
+ ]
231
+ }
232
+ ```
233
+
234
+ Параметры `Order`, `Package` и `Item` могут быть хешем или массивом хешей.
235
+
236
+ #### Вызов курьера
237
+
238
+ ```ruby
239
+ client.call_courier params
240
+ ```
241
+
242
+ Формат параметров:
243
+
244
+ ```ruby
245
+ {
246
+ Call: [
247
+ {
248
+ Date: Date.today,
249
+ SendCityCode: 65,
250
+ TimeBeg: '12:00',
251
+ TimeEnd: '16:00',
252
+ SenderName: 'John Doe',
253
+ SendPhone: '123-456-789',
254
+ # etc ...
255
+ Address: {
256
+ Street: 'Некая улица',
257
+ House: '123',
258
+ Flat: '456'
259
+ }
260
+ },
261
+ {
262
+ Date: Date.today.next_day,
263
+ # etc ...
264
+ },
265
+ # etc ...
266
+ ]
267
+ ```
268
+
269
+ Параметр `Call` может быть хешем или массивом хешей.
270
+
271
+ #### Список заказов на удаление
272
+
273
+ ```ruby
274
+ client.delete_orders params
275
+ ```
276
+
277
+ Формат параметров:
278
+
279
+ ```ruby
280
+ {
281
+ Number: 'Номер акта приема-передачи',
282
+ Order: [
283
+ { Number: 'Номер отправления клиента 1' },
284
+ { Number: 'Номер отправления клиента 2' },
285
+ # etc ...
286
+ ]
287
+ ```
288
+
289
+ Параметр `Order` может быть хешем или массивом хешей.
290
+
291
+ #### Статусы заказов
292
+
293
+ ```ruby
294
+ client.order_statuses
295
+ client.order_statuses filter_params
296
+ ```
297
+
298
+ Формат параметров:
299
+
300
+ ```ruby
301
+ {
302
+ ShowHistory: 1,
303
+ ChangePeriod: {
304
+ DateFirst: Date.today,
305
+ DateLast: Date.today
306
+ },
307
+ Order: {
308
+ DispatchNumber: 'Номер отправления СДЭК',
309
+ Number: 'Номер отправления клиента',
310
+ Date: Date.today
311
+ }
312
+ }
313
+ ```
314
+
315
+ #### Информация по заказам
316
+
317
+ ```ruby
318
+ client.order_infos filter_params
319
+ ```
320
+
321
+ Формат параметров:
322
+
323
+ ```ruby
324
+ {
325
+ ChangePeriod: {
326
+ DateBeg: Date.today,
327
+ DateEnd: Date.today
328
+ },
329
+ Order: {
330
+ DispatchNumber: 'Номер отправления СДЭК',
331
+ Number: 'Номер отправления клиента',
332
+ Date: Date.today
333
+ }
334
+ }
335
+ ```
336
+
337
+ #### Печатная форма квитанции к заказу
338
+
339
+ ```ruby
340
+ client.orders_print params
341
+ ```
342
+
343
+ Формат параметров:
344
+ ```ruby
345
+ {
346
+ CopyCount: 1,
347
+ Order: {
348
+ DispatchNumber: 'Номер отправления СДЭК',
349
+ Number: 'Номер отправления клиента',
350
+ Date: Date.today
351
+ }
352
+ }
353
+ ```
354
+
355
+ Параметр `Order` может быть хешем или массивом хешей.
356
+
357
+ Пример использования:
358
+
359
+ ```ruby
360
+ result = client.orders_print Order: { DispatchNumber: '123456' }
361
+ if result.errors.any?
362
+ result.errors.each do |e|
363
+ puts "#{e.code} - #{e.message}"
364
+ end
365
+ else
366
+ file_path = '/path/to/file.pdf'
367
+ File.open(file_path, 'w') { |f| f.write result.data }
368
+ end
369
+ ```
370
+
371
+ #### Расчёт стоимости доставки
372
+
373
+ ```ruby
374
+ client.calculate_price params
375
+ ```
376
+
377
+ Формат параметров:
378
+
379
+ ```ruby
380
+ {
381
+ dateExecute: Date.today,
382
+ senderCityId: 270,
383
+ receiverCityId: 44,
384
+ tariffId: 137,
385
+ tariffList: [
386
+ # ...
387
+ ],
388
+ modeId: 1,
389
+ goods: [
390
+ {
391
+ weight: 1,
392
+ length: 1,
393
+ width: 1,
394
+ height: 1,
395
+ # или
396
+ volume: 1
397
+ },
398
+ # etc ...
399
+ ]
400
+ }
401
+ ```
402
+
403
+ Использование калькулятора без авторизации:
404
+
405
+ ```ruby
406
+ calculator = CdekClient::CalculatorClient.new
407
+ result = calculator.calculate params
408
+ ```
409
+
410
+ ## TODO
411
+
412
+ - Тесты
413
+ - Улучшить преобразование xml в хеш и отрефакторить обработку получаемых данных
414
+
415
+ ## Ссылки
416
+
417
+ - [www.edostavka.ru](http://www.edostavka.ru/) - Оффициальный сайт СДЭК.
418
+ - [www.edostavka.ru/clients/integrator.html](http://www.edostavka.ru/clients/integrator.html/) - Документация к API.