cdek_client 0.0.1

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.
@@ -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.