Бортовой журнал Ктулху

Работа с API Новой Почты

Небольшой скрипт для выборки отделений Новой Почты по городам. Пока что больше от этого скрипта не требуется.

 

Для начала скачиваем отсюда PHP класс.

Затем зарегистрировать на сайте Новой Почты и в личном кабинете сгенерировать ключ доступа.

screenshot 2016 07 25 14 45 05 1

В принципе, там есть описание как с ним работать но у меня не пошло, может кому-то больше повезет.

Я делал следующим образом: склонировал в отдельную папку по пути /var/www/html/novaposhta.

php composer.phar require lis-dev/nova-poshta-api-2:dev-master

Получил такой ответ:

./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing lis-dev/nova-poshta-api-2 (dev-master 44e964c)
    Cloning 44e964c189c9e53bb850dfa8110eba42aff3428c
Writing lock file
Generating autoload files

Значит все в порядке, все файлы загрузились.

Дальше, создал файл скрипта, пусть будет nova-post-api.php.

Так как выводить нужно будет только список городов и подтягивать номера отделений по каждому городу, то понадобится всего два метода: getCities()  для городов и getWarehouses  для отделений.

Выведем список городов.

require_once('src/Delivery/NovaPoshtaApi2.php');
require_once('src/Delivery/NovaPoshtaApi2Areas.php');
$np = new \LisDev\Delivery\NovaPoshtaApi2('NP_KEY');
$cities = $np->getCities();
echo '<pre>';
print_r($cities);
echo '</pre>';

Выведется массив городов.

Отделения в каждом городе можно выбрать по артикулу [Ref].

$wh = $np->getWarehouses($city_id);
 foreach ($wh['data'] as $warehouse) {
 echo '<option value="'.$warehouse['Ref'].'">'.$warehouse['DescriptionRu'].'</option>';
 }

Теперь нужно обернуть это в более-менее приличную обертку, например вызывать аяксом.

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <script src="https://code.jquery.com/jquery-2.2.4.min.js<a href="https://code.jquery.com/jquery-2.2.4.min.js"">"</a> integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
 <title>Title</title>
</head>
<body>
<form method="post" action="" id="citis">
 <select id="cities" name="city"></select>
</form>
<select id="warehouses"></select>
<script>
 // load cities
 $("#cities").load( "file.php" );
// get warehouses
 $('#cities').change(function(){
 var wh = $(this).val();
$.ajax({
 url : 'file.php',
 type : 'POST',
 data : {
 'warehouses' : wh,
 },
 success : function(data) {
 $('#warehouses').html(data);
 },
 error : function(request,error)
 {
 $('#warehouses').html('<option>-</option>');
 }
 });
 })
</script>
</body>
</html>

Обработчик

<?php
require_once('src/Delivery/NovaPoshtaApi2.php');
require_once('src/Delivery/NovaPoshtaApi2Areas.php');
$np = new \LisDev\Delivery\NovaPoshtaApi2(
 'NP_API_KEY',
 'ru', // Язык возвращаемых данных: ru (default) | ua | en
 FALSE, // При ошибке в запросе выбрасывать Exception: FALSE (default) | TRUE
 'curl' // Используемый механизм запроса: curl (defalut) | file_get_content
);
if($_POST['warehouses']) {
 $wh = $np->getWarehouses($_POST['warehouses']);
 foreach ($wh['data'] as $warehouse) {
 echo '<option value="'.$warehouse['Ref'].'">'.$warehouse['DescriptionRu'].'</option>';
 }
} else {
 $cities = $np->getCities();
 foreach ($cities['data'] as $city) {
 echo '<option value="'.$city['Ref'].'">'.$city['DescriptionRu'].'</option>';
 }
}
?>

Вложения:
ФайлОписаниеРазмер файла:
Скачать этот файл (nova-poshta-api-2.zip)nova-poshta-api-2.zip 8 Кб