Новая Почта API PHP

Представляю Вашему вниманию небольшой PHP Class для работы с API Новая Почта.
Почему небольшой? Потому, что класс умеет только получать список городов, в которых находятся отделения службы доставки новая Почта, а так же список отделений по городам. А точнее список отделений Новая Почта для конкретного города.

Класс удобен для динамической загрузки отделений, например на странице заказа магазина и т.д.
Не буду особо уделять внимание деталям, скажу только то, что для работы с API Новая Почта нужен ключ, получить который можно у менеджеров компании.

Класс так же умеет кешировать полученные результаты. Это сделано для того, чтоб сервер постоянно не дергал сайт Новой Почты, который иногда сильно тормозит и соответственно заставить Вашего покупателя ждать, а это точно не повлияет на рост продаж! Кеширование реализовано для Framework OpenCart, но Вы можете и не использовать его и/или использовать собственную систему кеширования данных. В примере я его закомментирую.

По примеру моего класса и прочитав описание API на странице Новой Почты, Вы легко сможете реализовать остальные функции API.
PHP Class для работы с API Новая Почта
<?php
class ModelCheckoutNovap{

    private $API_KEY = 'beccbded8b9472831cffa9e28268fb4f'; // заменить на свой ключ

    private function sendRequest($xml) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://orders.novaposhta.ua/xml.php');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $response = curl_exec($ch);
        curl_close($ch);

        return $response;
    }

    public function getOfficess() {
        $xml = "
                <?xml version=\"1.0\" encoding=\"utf-8\"?>
                <file>
                <auth>{$this->API_KEY}</auth>
                <citywarehouses/>
                </file>";

        $cache = md5($xml);
        //$offices = $this->cache->get('nova.poshta.' . $cache); // запрос к кеш
        if (!empty($offices)) {
            return $offices;
        } else {
            $offices = $this->sendRequest($xml);
            //$this->cache->set('nova.poshta.' . $cache, $offices); // сохранение в кеш
            return $offices;
        }//if
    }

    public function getOfficesByCity($city) {
        $xml = "
                <?xml version=\"1.0\" encoding=\"utf-8\"?>
                <file>
                <auth>{$this->API_KEY}</auth>
                <warenhouse/>
                <filter>$city</filter>
                </file>";
        $cache = md5($xml);
        //$cities = $this->cache->get('nova.poshta.' . $cache); // запрос в кеш
        if (!empty($cities)) {
            return $cities;
        } else {
            $cities = $this->sendRequest($xml);
            //$this->cache->set('nova.poshta.' . $cache, $cities); // сохранение в кеш
            return $cities;
        }//if
    }

}

?>

Пример вызова API Новая Почта
$np = new ModelCheckoutNovap();
$np->getOfficess(); // получить список городов
$np->getOfficesByCity("Киев"); // получить список отделений для города "Киев"

Удачного кодинга!
  • 0
  • 29 апреля 2014, 16:17
  • igorrius

Комментарии (3)

RSS свернуть / развернуть
Подскажи пожалуйста загрузил твой скрипт
но выдает ошибку Fatal error: Class 'Model' not found in:...
В чем может быть проблема?
0
Вы должны загрузить модель, кажется так:
$this->load->model('checkout/novap');
0
Я сам себе ответил, потому как сразу не разобрался) Точнее забыл) Класс взят из рабочей версии системы и наследует Model. Сейчас исправлю.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus