|
| 1 | +Документация на русском языке доступна [по ссылке](https://github.com/lis-dev/nova-poshta-api-2/blob/master/README.md) |
| 2 | + |
| 3 | +[](https://travis-ci.com/lis-dev/nova-poshta-api-2) |
| 4 | + |
| 5 | +# Nova Poshta API 2.0 |
| 6 | +Клас надає доступ до функцій API 2.0 служби доставки Нова Пошта |
| 7 | + |
| 8 | +# Підготовка |
| 9 | +## Отримання ключа API |
| 10 | +Для використання API потрібно: |
| 11 | +* зареєструватися на сайті [Нової Пошти](https://novaposhta.ua) |
| 12 | +* На [сторінці налаштувань](https://my.novaposhta.ua/settings/index#apikeys) в особистому кабінеті сгенерувати ключ для роботи з API |
| 13 | + |
| 14 | +Після отримання ключа API надається можливість використовувати всі методи класу [офіційний сайт з документації](https://my.novaposhta.ua/data/API2-200215-1622-28.pdf) |
| 15 | + |
| 16 | +## Установка останньої версії класу для роботи з API |
| 17 | +### Git |
| 18 | +Необхідно виконати в командному рядку |
| 19 | +```git |
| 20 | +git clone https://github.com/lis-dev/nova-poshta-api-2 |
| 21 | +``` |
| 22 | +### Composer |
| 23 | +Необхідно створити файл ``composer.json`` з наступним змістом |
| 24 | +```json |
| 25 | +{ |
| 26 | + "require": { |
| 27 | + "lis-dev/nova-poshta-api-2": "~0.1.0" |
| 28 | + } |
| 29 | +} |
| 30 | +``` |
| 31 | +і запустити з командного рядку команду ``php composer.phar install`` чи ``php composer.phar update`` |
| 32 | +Або виконати в командному рядку |
| 33 | +``` |
| 34 | +composer require lis-dev/nova-poshta-api-2 |
| 35 | +``` |
| 36 | +### Альтернативна установка |
| 37 | +Необхідно завантажити архів за посиланням |
| 38 | +``` |
| 39 | +https://github.com/lis-dev/nova-poshta-api-2/archive/master.zip |
| 40 | +``` |
| 41 | +# Формати даних |
| 42 | +Для вхідних даних використовуються PHP масиви, відповідь сервера може бути отримана в форматі: |
| 43 | +* як PHP масив |
| 44 | +* JSON |
| 45 | +* XML |
| 46 | + |
| 47 | +# Використання |
| 48 | +## Підключення класу при установці через composer |
| 49 | +```php |
| 50 | +require __DIR__ . '/vendor/autoload.php'; |
| 51 | +``` |
| 52 | + |
| 53 | +## Підключення класа за альтернативній установці |
| 54 | +```php |
| 55 | +require '<path_to_dir>/src/Delivery/NovaPoshtaApi2.php'; |
| 56 | +``` |
| 57 | + |
| 58 | +## Створення екземпляру класа |
| 59 | +Клас знаходиться в namespace `\LisDev\Delivery`. При створенні екземпляру класу необхідно |
| 60 | +або використовувати Full Qualified Class Name: |
| 61 | +```php |
| 62 | +$np = new \LisDev\Delivery\NovaPoshtaApi2('Ваш_ключ_API_2.0'); |
| 63 | +``` |
| 64 | +або вказати namespace що використовується у секції use: |
| 65 | +```php |
| 66 | +use LisDev\Delivery\NovaPoshtaApi2; |
| 67 | +... |
| 68 | +$np = new NovaPoshtaApi2('Ваш_ключ_API_2.0'); |
| 69 | +``` |
| 70 | + |
| 71 | +Більш детальну інформацію по роботі з namespace можно отримати [на сайті документації php](https://www.php.net/manual/ru/language.namespaces.rationale.php) |
| 72 | + |
| 73 | +## Створення екземпляра класу (з розширеними параметрами) |
| 74 | +Якщо потрібно отримувати дані на мові, відмінної від російської, виключати Exception при помилці запросу, або за відсутності установленої бібліотеки curl на сервері |
| 75 | +```php |
| 76 | +$np = new NovaPoshtaApi2( |
| 77 | + 'Ваш_ключ_API_2.0', |
| 78 | + 'ru', // Мова повертаємих даних: ru (default) | ua | en |
| 79 | + FALSE, // При помилці в запросі виключати Exception: FALSE (default) | TRUE |
| 80 | + 'curl' // Використовуємий механізм запросу: curl (defalut) | file_get_content |
| 81 | +); |
| 82 | +``` |
| 83 | + |
| 84 | +## Отримання інформації про статус трек-номеру |
| 85 | +```php |
| 86 | +$result = $np->documentsTracking('59000000000000'); |
| 87 | +``` |
| 88 | + |
| 89 | +## Отримання термінів доставки |
| 90 | +```php |
| 91 | +// Отримання коду міста за його назвою та області |
| 92 | +$sender_city = $np->getCity('Белгород-Днестровский', 'Одесская'); |
| 93 | +$sender_city_ref = $sender_city['data'][0]['Ref']; |
| 94 | +// Отримання коду міста за його назвою та області |
| 95 | +$recipient_city = $np->getCity('Киев', 'Киевская'); |
| 96 | +$recipient_city_ref = $recipient_city['data'][0]['Ref']; |
| 97 | +// Дата відправки вантажу |
| 98 | +$date = date('d.m.Y'); |
| 99 | +// Отримання приблизної дати прибуття вантажу між складами в різних містах |
| 100 | +$result = $np->getDocumentDeliveryDate($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $date); |
| 101 | +``` |
| 102 | +## Отримання вартості доставки |
| 103 | +```php |
| 104 | +// Отримання коду міста за його назвою та області |
| 105 | +$sender_city = $np->getCity('Белгород-Днестровский', 'Одесская'); |
| 106 | +$sender_city_ref = $sender_city['data'][0]['Ref']; |
| 107 | +// Отримання коду міста за його назвою та області |
| 108 | +$recipient_city = $np->getCity('Киев', 'Киевская'); |
| 109 | +$recipient_city_ref = $recipient_city['data'][0]['Ref']; |
| 110 | +// Вага вантажу |
| 111 | +$weight = 7; |
| 112 | +// Ціна в грн |
| 113 | +$price = 5450; |
| 114 | +// Отримання вартості доставки вантажу з зазначеною вагою та вартістю між складами в різних містах |
| 115 | +$result = $np->getDocumentPrice($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $weight, $price); |
| 116 | +``` |
| 117 | +## Генерація нової поштової накладної |
| 118 | +```php |
| 119 | +// Перед генерацією ЕН необхідно отримати дані відправника |
| 120 | +// Отримання всіх відправників |
| 121 | +$senderInfo = $np->getCounterparties('Sender', 1, '', ''); |
| 122 | +// Вибір відправника у конкретному місті (у цьому випадку - першому за списком) |
| 123 | +$sender = $senderInfo['data'][0]; |
| 124 | +// Інформація склада відправника |
| 125 | +$senderWarehouses = $np->getWarehouses($sender['City']); |
| 126 | +// Генерація нової ЕН |
| 127 | +$result = $np->newInternetDocument( |
| 128 | + // Дані відправника |
| 129 | + array( |
| 130 | + // Дані користувача |
| 131 | + 'FirstName' => $sender['FirstName'], |
| 132 | + 'MiddleName' => $sender['MiddleName'], |
| 133 | + 'LastName' => $sender['LastName'], |
| 134 | + // Замість FirstName, MiddleName, LastName можна ввести зареєстровані ПІБ відправника чи найменування фірми для юридичних особ |
| 135 | + // (можна отримати за допомогою методу getCounterparties('Sender', 1, '', '')) |
| 136 | + // 'Description' => $sender['Description'], |
| 137 | + // Необов'язкове поле, у випадку відсутності будуть використовуватися з даних контакта |
| 138 | + // 'Phone' => '0631112233', |
| 139 | + // Місто відправлення |
| 140 | + // 'City' => 'Белгород-Днестровский', |
| 141 | + // Область відправлення |
| 142 | + // 'Region' => 'Одесская', |
| 143 | + 'CitySender' => $sender['City'], |
| 144 | + // Відділення відправника по ID (у цьому випадку - перше у списку) |
| 145 | + 'SenderAddress' => $senderWarehouses['data'][0]['Ref'], |
| 146 | + // Відділення за адресою |
| 147 | + // 'Warehouse' => $senderWarehouses['data'][0]['DescriptionRu'], |
| 148 | + ), |
| 149 | + // Дані отримувача |
| 150 | + array( |
| 151 | + 'FirstName' => 'Сидор', |
| 152 | + 'MiddleName' => 'Сидорович', |
| 153 | + 'LastName' => 'Сиродов', |
| 154 | + 'Phone' => '0509998877', |
| 155 | + 'City' => 'Киев', |
| 156 | + 'Region' => 'Киевская', |
| 157 | + 'Warehouse' => 'Отделение №3: ул. Калачевская, 13 (Старая Дарница)', |
| 158 | + ), |
| 159 | + array( |
| 160 | + // Дата відправлення |
| 161 | + 'DateTime' => date('d.m.Y'), |
| 162 | + // Тип доставки, додатково - getServiceTypes() |
| 163 | + 'ServiceType' => 'WarehouseWarehouse', |
| 164 | + // Тип оплати, додатково - getPaymentForms() |
| 165 | + 'PaymentMethod' => 'Cash', |
| 166 | + // Хто сплачує доставку |
| 167 | + 'PayerType' => 'Recipient', |
| 168 | + // Вартість вантажу в грн |
| 169 | + 'Cost' => '500', |
| 170 | + // Кількість місць |
| 171 | + 'SeatsAmount' => '1', |
| 172 | + // Опис вантажу |
| 173 | + 'Description' => 'Кастрюля', |
| 174 | + // Тип доставки, додатково - getCargoTypes |
| 175 | + 'CargoType' => 'Cargo', |
| 176 | + // Вага вантажу |
| 177 | + 'Weight' => '10', |
| 178 | + // Об'єм вантажу в м^3 |
| 179 | + 'VolumeGeneral' => '0.5', |
| 180 | + // Зворотня доставка |
| 181 | + 'BackwardDeliveryData' => array( |
| 182 | + array( |
| 183 | + // Хто оплачує зворотню доставку |
| 184 | + 'PayerType' => 'Recipient', |
| 185 | + // Тип доставки |
| 186 | + 'CargoType' => 'Money', |
| 187 | + // Значення зворотньої доставки |
| 188 | + 'RedeliveryString' => 4552, |
| 189 | + ) |
| 190 | + ) |
| 191 | + ) |
| 192 | +); |
| 193 | +``` |
| 194 | +## Отримання складів в зазначеному місті |
| 195 | +```php |
| 196 | +// В параметрах вказується місто і область (для більш точного пошуку) |
| 197 | +$city = $np->getCity('Киев', 'Киевская'); |
| 198 | +$result = $np->getWarehouses($city['data'][0]['Ref']); |
| 199 | +``` |
| 200 | +## Виклик довільного метода |
| 201 | +```php |
| 202 | +$result = $np |
| 203 | + ->model('Имя_модели') |
| 204 | + ->method('Имя_метода') |
| 205 | + ->params(array( |
| 206 | + 'Имя_параметра_1' => 'Значение_параметра_1', |
| 207 | + 'Имя_параметра_2' => 'Значение_параметра_2', |
| 208 | + )) |
| 209 | + ->execute(); |
| 210 | +``` |
| 211 | + |
| 212 | +# Реалізовані методи для роботи з моделями |
| 213 | + |
| 214 | +## Модель InternetDocument |
| 215 | +* save |
| 216 | +* update |
| 217 | +* delete |
| 218 | +* getDocumentPrice |
| 219 | +* getDocumentDeliveryDate |
| 220 | +* getDocumentList |
| 221 | +* getDocument |
| 222 | +* printDocument |
| 223 | +* printMarkings |
| 224 | +* documentsTracking |
| 225 | +* newInternetDocument |
| 226 | +* generateReport |
| 227 | + |
| 228 | +## Модель Counterparty |
| 229 | +* save |
| 230 | +* update |
| 231 | +* delete |
| 232 | +* cloneLoyaltyCounterpartySender |
| 233 | +* getCounterparties |
| 234 | +* getCounterpartyAddresses |
| 235 | +* getCounterpartyContactPersons |
| 236 | +* getCounterpartyByEDRPOU |
| 237 | +* getCounterpartyOptions |
| 238 | + |
| 239 | +## Модель ContactPerson |
| 240 | +* save |
| 241 | +* update |
| 242 | +* delete |
| 243 | + |
| 244 | +## Модель Address |
| 245 | +* save |
| 246 | +* update |
| 247 | +* delete |
| 248 | +* getCities |
| 249 | +* getStreet |
| 250 | +* getWarehouses |
| 251 | +* getAreas |
| 252 | +* findNearestWarehouse |
| 253 | + |
| 254 | +## Модель Common |
| 255 | +* getTypesOfCounterparties |
| 256 | +* getBackwardDeliveryCargoTypes |
| 257 | +* getCargoDescriptionList |
| 258 | +* getCargoTypes |
| 259 | +* getDocumentStatuses |
| 260 | +* getOwnershipFormsList |
| 261 | +* getPalletsList |
| 262 | +* getPaymentForms |
| 263 | +* getTimeIntervals |
| 264 | +* getServiceTypes |
| 265 | +* getTiresWheelsList |
| 266 | +* getTraysList |
| 267 | +* getTypesOfPayers |
| 268 | +* getTypesOfPayersForRedelivery |
| 269 | + |
| 270 | +# Тести |
| 271 | +Актуальні тести та приклади використання класу знаходяться у файлі `tests/NovaPoshtaApi2Test.php` |
| 272 | + |
| 273 | +Для запуску тестів локально необхідно виконати в командному рядку |
| 274 | +``` |
| 275 | +composer install |
| 276 | +NOVA_POSHTA_API2_KEY=Ваш_ключ_API_2.0 vendor/phpunit/phpunit/phpunit tests |
| 277 | +``` |
0 commit comments