13.12.2017

Разработка PHP SDK для транспортной компании «DPD»

Задача

Для упрощения интеграции клиентов транспортной компании DPD с их API, нужно реализовать набор инструментов разработки PHP.

Мы разработали библиотеку, в которой представлены шаблоны кодов для выполнения следующих задач:

  • Предоставление разработчику всех возможных способов доставки: курьером и на пункт выдачи заказов;
  • Возможность автоматического расчета стоимости доставки, с учетом габаритов и веса заказа;
  • Получение сроков доставки;
  • Возможность получения квитанций к заказам и актов передачи курьеру;
  • Отслеживание статуса посылок в DPD;
  • Синхронизация статусов доставки со статусами заказа в интернет магазине;
  • Поддержка мульти-аккаунтов для работы со странами СНГ;
  • Автоматический выбор подходящего аккаунта по стране назначения покупателя;
  • Поддержка конвертации валюты из валюты магазина в валюту аккаунта DPD;
  • Работа с местоположениями и терминалами;
  • Подбор подходящих терминалов отправки и получения заказа, с учетом его веса и габаритов.

Как использовать SDK?

SDK поддерживает работу с пакетным менеджером composer, что позволяет использовать его функционал для подключения и своевременного обновления SDK.

Для того, чтобы подключить SDK с помощью composer Вам необходимо в своем composer.json файле добавить

"repositories": [
  {
    "type": "vcs",
    "url": "https://bitbucket.org/DPDinRussia/dpd.sdk";
  }
]
    

После этого, для скачивания и установки SDK достаточно выполнить комманду

composer require ipol/dpd.sdk:dev-master
    

Так же SDK можно просто скачать в виде обычного архива и подключить его напрямую в Ваш проект

require_once 'path/to/dpd.sdk/src/autoload.php';
    

Настройка

SDK имеет многочисленные параметры позволяющие гибко настроить свою работу под специфику различных проектов.

Самыми важными являются настройки подключения к API

  • KLIENT_NUMBER - клиентский номер в системе DPD
  • KLIENT_KEY - секретный ключ для авторизации в системе DPD
  • KLIENT_CURRENCY - валюта аккаунта

В случае если в проекте используется несколько аккаунтов DPD для разных стран СНГ, так же потребуется заполнить:

  • KLIENT_NUMBER_KZ,KLIENT_KEY_KZ,KLIENT_CURRENCY_KZ - параметры для подключения казахского аккаунта
  • KLIENT_NUMBER_BY,KLIENT_KEY_BY,KLIENT_CURRENCY_BY - параметры для подключения белорусского аккаунта

По умолчанию SDK хранит свои данные во внутренней SQLite БД. Однако данная БД не отличается производительностью и при работе с ней возможны временные задержки.

Для решения этой проблемы SDK позволяет настроить подключение к MYSQL БД, это делается c помощью параметров:

  • DB.DSN - dsn строка подключения к БД
  • DB.USERNAME - имя пользователя для подключения к БД
  • DB.PASSWORD - пароль пользователя для подключения к БД
  • DB.DRIVER - используемый драйвер при подключении к БД. По умолчанию будет вычислен автоматически из строки DSN
  • DB.PDO - вместо всех параметров, можно сразу передать готово подключение в виде объекта \PDO

В этом случае SDK автоматически создаст свои таблицы в БД указанной в подключении.

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

  • WEIGHT - вес товара по умолчанию
  • LENGTH - длина товара по умолчанию
  • WIDTH - ширина товара по умолчанию
  • HEIGHT - высота товара по умолчанию

Полный список параметров и их описание можно увидеть на здесь

Примеры использования

SDK поставляется с полным набором различных примеров и подробным описанием функционала.

Все примеры располагаются в директории examples внутри SDK.

Результат работы SDK

В итоге мы имеем SDK (набор средств), который, встраиваясь в любой PHP-проект, предоставляет разработчику удобный интерфейс для взаимодействия с API DPD. При этом часть рутинных операций, такие как расчет габаритов посылки, синхронизация городов обслуживания, поиск подходящего терминала и др, скрыты в SDK, позволяя разработчику сосредоточить все силы на решении бизнес-задачи проекта.