img
scroll
#

Підключення API EasyPost

Uk Ru En
Статья
#0002

Для самых широкоиспользуемых языков программирования EasyPost предосталяет SDK.

Так, если вы используете PHP, - можете установить соответствующий пакет с помощью composer:

composer require EasyPost/EasyPost-php

Connect EasyPost API

EasyPost для подписи запросов использует только один параметр, API-ключ.
В клиентском коде вам необходимо сначала импортировать EasyPost

use EasyPost;


Все классы находятся в пространстве имен EasyPost, поэтому для установки API-ключа для подписи запросов необходимо сделать следующее:

EasyPost\EasyPost::setApiKey($apiKey);


Теперь можно делать запросы, например на создание адреса. Некоторые системы, такие как ShipStation, могут динамически принимать адрес только получателя, а адрес отправителя брать из личного кабинета, но может и не принимать ;). EasyPost же необходимо передать оба адреса.


Допустим в вашей системе уже есть сущность заказ, у которого есть поля отвечающие за адрес доставки. Тогда код для сохранения адреса в Eaypost будет выглядеть следующим образом:

$receiverAddress = EasyPost\Address::create([
   'verify' => ['delivery'],
   'company' => $order->getCompany(),
   'street1' => $order->getStreet(),
   'street2' => $order->getHouseNumber(),
   'city' => $order->getCity(),
    'state' => $order->getUserState(),
   'zip' => $order->getZip(),
    'phone' => $order->getUserPhone(),
    'email' => $order->getEmail(),
    'country' => $order->getCountryCode(),
]);


В рузультате мы получием в ответ тот же массив, но с дополнительными полями, в том числе "id" - идентификатор адреса в системе EasyPost, "verifications" - массив результатов верификации адреса, и другими.

IАналогичным образом нужно указать и сохранить в переменную $senderAddress адресс отправителя.

Теперь необходимо создать саму посылку, которая будет отправляться:

$parcel = EasyPost\Parcel::create([
    'weight' => $order->getWeight(),
    'height' => $order->getHeight(),
   'width' => $order->getWidth(),
   'length' => $order->getLength(),
]);


Теперь у нас есть три переменных $receiverAddress, $senderAddress и $parcel, которые являются экземплярами классов EasyPost\Address и EasyPost\Parcel соответственно..

Пакет EasyPost сам кодирует и декодирует данные в json, поэтому можно передавать объекты в массивы. Например теперь, когда мы готовы создать отправку, мы должны передать все полученные объекты в метод для создания отправки:

$shipment = EasyPost\Shipment::create([
    "to_address" => $fromAddress,
    "from_address" => $toAddress,
    "parcel" => $parcel,
    "options" => [
    "label_format" => 'PDF'
    ],
]);


Если всё хорошо, то в поле rates объекта $shipment будет находиться массив объетов, отвечающих за информацию о службах доставки. Допустим одна из служб доставки нам подошла, например USPS со способом доставки с самой низкой стоимостью, и мы хотим приобрести наклейку (label) для нее и получить PDF-файл для печати. Тогда нам нужно передать методу "buy" объекта $shipment следующее значение:

$shipment->buy($shipment->lowest_rate(['USPS']));


, где метод lowest_rate найдет самый дешевый метод доставки из всех методов, которые предоставляет служба USPS для данной отправки.


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

Т.к. все наши объекты имеют id в системе EasyPost, мы можем сохранять эти идентификаторы, а позже брать инфо об объектах непосредственно с EasyPost, используя метод "retrieve" каждого из выщеприведенных классов: EasyPost\Shipment, EasyPost\Address и EasyPost\Parcel. Кроме того, EasyPost предоставляет возможность создавать все 4 сущности в один запрос, для этого нужно передать в метод create класса EasyPost\Shipment многомерный массив, например ключ "to_address" будет содержать массив данных адреса получателя, и т.д. Но рассмотренный выше метод работы позволяет более гибко реагировать на возникающие ошибки валидации.

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

Блог
#0002
Статті, які можуть вас також зацікавити
Реалізація структури бази продуктів з сервісу sql-ex.ru з підтримкою Doctrine2
Розширюйте проект на міцній основі з використанням вбудованого функціоналу Doctrine2, спробуйте додати свої класи і таблиці. Характеристика бази продуктів
Поради щодо підключення до сервісу API ShipStation
Поради щодо підключення до сервісу API ShipStation
Використовуйте API ShipStation як агрегатор для вашого сервісу, а такж як відмінний інструмент для економії коштів на відправленнях посилок. Опис особливостей сервісу
Ключові відмінності між Laravel і Symfony
Ключові відмінності між Laravel і Symfony
Який з двох фреймворків Laravel чи Symfony вибрати для реалізації проекту? Під які конкретні потреби використовувати той чи інший фреймворк? Характеристика функціональних можливостей фреймворків
Особливості впровадження принципів SCRUM в нашій компанії і їх ефективність
Впровадження методів управління проектами SCRUM в нашій компанії, які використовують принципи і артефакти, результати застосування в спектрі ефективності використання трудових і часових ресурсів.
Зв'яжіться з нами
#0013
Готові Розпочати? Повідомте нас про це!
Телефон:
Адреса:

Україна, Житомир
вул. Вітрука 9в

Пн-Пт 9.00 - 19.00

Зв'яжіться з нами
#0000
Залишилися запитання?
Опишіть свою проблему, заповніть форму нижче та наші спеціалісти допоможуть Вам!
Обов'язкове поле
Обов'язкове поле
Обов'язкове поле
Обов'язкове поле