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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +418 -0
- data/Rakefile +2 -0
- data/cdek_client.gemspec +25 -0
- data/lib/cdek_client.rb +153 -0
- data/lib/cdek_client/abstract_client.rb +120 -0
- data/lib/cdek_client/calculator_client.rb +68 -0
- data/lib/cdek_client/calculator_errors.rb +73 -0
- data/lib/cdek_client/client.rb +256 -0
- data/lib/cdek_client/errors.rb +386 -0
- data/lib/cdek_client/result.rb +22 -0
- data/lib/cdek_client/util.rb +125 -0
- data/lib/cdek_client/version.rb +3 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -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.
|