Я нашел API, который помогает вам доставить продукты электронной коммерции через несколько курьерских служб.

1656630613 ya nashel api kotoryj pomogaet vam dostavit produkty elektronnoj kommerczii

Игорь Петров

AOp9x1zrUTiaq-sFjzQ4YKAh7lps3uDrDHw2
Фото Гийома Болдюка на Unsplash

Последние несколько месяцев были очень напряженными: я работал над разработкой различных проектов электронной коммерции, присоединился к стартапу и был соорганизатором еще одного — и все это во время подготовки к ультрамарафону.

Так случилось, что я работал над некоторыми проектами электронной коммерции, которые нуждались в функциях доставки. Эти проекты уже были загружены кем-то другим (написаны не мной с нуля), и они имели Шиппо Доставка сервис, интегрированный в них. Да я встретил Шиппо и начал с ним работать.

Я не знаю, является ли Shippo единственным вариантом для функций доставки в веб-приложениях, но он достаточно популярен и имеет достаточно хороший и простой API. В этой статье мы раскроем несколько распространенных задач, которые вам, возможно, придется решить с помощью этой службы, а также Рубиновый.

Начиная с Шиппо

Для начала необходимо иметь учетную запись Shippo и shippo камень в комплекте для вашего проекта:

gem 'shippo', git: 'https://github.com/goshippo/shippo-ruby-client'

Далее вам нужно настроить его с помощью маркера API, который у вас должен быть (Shippo предоставляет вам test или live жетоны). Просто вставьте это config/initializers/shippo.rb:

Shippo::api_token = ENV['shippo_api_token']

Для работы с ENV вы можете использовать что-то вроде dotenv или figaro или Героку.

Проверка адресов

Одна интересная функция Shippo – это возможность проверять адреса. Предположим, у вас есть адресные поля в профилях пользователей программы, и при регистрации вам нужно проверить, правильно ли адрес пользователя. Я пришел к специальному решению валидатора:

class Profile < ApplicationRecord  validates_with ProfileAddressValidatorend

И использование кода валидатора Shippo::Address API будет выглядеть так:

QWMwFwVvJpJR8lyD1d1yf6tmIPidmnfQfqEd

Создание ставок доставки/загрузки

Следующая популярная задача – создание отправки в два шага. Во-первых, вы собираетесь получить тарифы доставки от разных перевозчиков (которые вы настроили в Shippo) и показать их своим пользователям, чтобы они могли выбрать один. Во-вторых, на основе выбора пользователя вы создадите транзакцию (транспортную этикетку).

Вы также можете предложить пользовательский интерфейс для редактирования размеров посылок или просто позволить им выбирать из предварительно определенных посылок/ящиков.

Наш первый шаг может выглядеть так:

Shippo::Shipment.create(  address_from: @address_from,  address_to: ADDRESS_TO,  parcels: parcels,  async: false)

Если вы заворачиваете это в служебный объект, @address_from это то, что вы хотите передать в него. Должно быть так (то же Хэш для ADDRESS_TO которая может быть постоянной, если ваши пользователи посылают только на один адрес):

{    :name => 'Apple',    :street1 => 'One Apple Park Way',    :city => 'Cupertino',    :state => 'CA',    :zip => '95014',    :country => 'US',    :phone => '+1 (408) 996–1010',    :email => 'tim@apple.com'  }

И, наконец, parcels это массив следующих структур:

{  length: 10, # or something coming from params  width: 10,  height: 10,  distance_unit: :in,  weight: 3,  mass_unit: :lb,}

После передачи всех этих данных и вызова Shippo::Shipment.create вы должны получить объект отправки, содержащий a rates атрибут ( shipment.rates ).

Создайте транспортную этикетку (транзакцию) на основе выбранного курса

У нас есть скорость, выбранная пользователем, и мы создали ее (скажем, в контроллере). @selected_shipping_rate. Теперь просто сделайте это:

transaction = Shippo::Transaction.create(  rate: @selected_shipping_rate['object_id'],  label_file_type: "PDF",  metadata: @ticket.token.to_s, # pass any additional data if needed  async: false)

Вы должны подтвердить, было ли это успешно или нет, проверив transaction["status"] . Она должна быть SUCCESS или что-либо из доступных статусов. Вас также может заинтересовать transaction["tracking_number"] и transaction["label_url"] (URL-адрес файла PDF транспортной этикетки).

Создание метки одного вызова

Вы можете создать транспортную этикетку с помощью одного вызова API Shippo. Ну ты можешь это сделать! В этом случае вы воспользуетесь конкретным перевозчиком, например FedEx.

Итак, этот вызов API выглядит как комбинация двух вызовов, которые мы совершали ранее: carrier_account является идентификатором объекта Carrier – вы можете получить его с помощью – и servicelevel_token является соответствующим маркером из этого перечня уровней обслуживания:

NlEl3YWnWQr6vHkj493AFNxoYxua6G5yShUW

Настройки операторов

Для работающих перевозчиков необходимо передать все необходимые данные. Это зависит от конкретного поставщика доставки. Шиппо имеет очень хорошую страницу с описанием того, что нужно. Например, чтобы создать FedEx, вам нужно получить от них по крайней мере meter number и account number.

Одна хитрая вещь по FedEx: Их тестовый сервер не очень стабилен (и этот факт был подтвержден службой поддержки Shippo). Итак, иногда вы сможете создавать отправки и тарифы запросов, но иногда вы получите такой ответ: «FedEx API не ответил. Пожалуйста, повторите попытку через несколько минут».

Отслеживание отправлений

И, наконец, вы можете походить на «старшего брата», который наблюдает за вашими отправлениями 🙂 Тогда вам нужно начать отслеживать отправления, чтобы знать, когда они действительно были отправлены и доставлены.

Шиппо имеет Shippo::Track API для таких целей и веб-хуки, которые можно получить через HTTP. Во-первых, вам следует зарегистрироваться, что вы собираетесь отслеживать какое-нибудь отправление.

MPyP80JfgdQENozndN6QBqAocfSS7YnAEiP7

@shipping_label это наш собственный объект, который мы храним в базе данных: мы сохранили его после успешного создания транзакции Shippo (транспортной этикетки).

Во-вторых, вам нужно иметь обработчик webhooks: с точки зрения Rails, вам нужно добавить маршрут и контроллер.

Затем Shippo отправит вам данные об отслеживании обновлений статуса, чтобы вы могли обновить информацию о статусе в базе данных и синхронизировать все.

# Shippo webhook in routes.rbpost '/shippo_webhook' => 'shippo#track_shipment'
R0l88xDYcJoRXr8X4KHgU91DXPNEjaPLEsCU

Не забудьте проверить это при разработке с помощью вашего любимого инструмента разработки, например туннелирования ngrok или localtunnel . И, конечно, вам нужно войти в свою учетную запись Shippo и указать URL, на который будут поступать веб-хуки, а также типы веб-хуков.

Вывод

Shippo – прекрасное решение почти для чего угодно, если вам нужны некоторые возможности доставки в вашем приложении. Поэтому я бы выбрал его для следующего проекта.

Если на рынке есть что-нибудь конкурентное, дайте мне знать в комментариях. Я хотел бы услышать о чем-то действительно крутом для задач доставки.

Если вам понравился этот пост, нажмите, пожалуйста чтобы распространить информацию.

Добавить комментарий

Ваш адрес email не будет опубликован.