Yandex-delivery

API wrapper для Яндекс.доставки API.

Установка Ruby

$ gem install yandex-delivery

Установка Rails

добавьте в Gemfile:

gem 'yandex-delivery'

и запустите bundle install.

Затем:

rails g yandex_delivery:install

Требования

Необходимо получить токен авторизации.

Использование Rails

В файл config/yandex_delivery2.yml вставьте ваши данные из настоек яндекс доставки и токен авторизации

Использование Ruby

Сначала создайте экземпляр объекта YandexDelivery::Request:

delivery = YandexDelivery::Request.new(api_key: "your_access_token")

Вы можете изменять api_key, timeout, open_timeout, faraday_adapter, proxy, symbolize_keys, logger, и debug:

YandexDelivery::Request.api_key = "your_access_token"
YandexDelivery::Request.timeout = 15
YandexDelivery::Request.open_timeout = 15
YandexDelivery::Request.symbolize_keys = true
YandexDelivery::Request.debug = false

Либо в файле config/initializers/yandex_delivery2.rb для Rails.

Debug Logging

Pass debug: true to enable debug logging to STDOUT.

delivery = YandexDelivery::Request.new(api_key: "your_access_token", debug: true)

Custom logger

Ruby Logger.new is used by default, but it can be overrided using:

delivery = YandexDelivery::Request.new(api_key: "your_access_token", debug: true, logger: MyLogger.new)

Logger can be also set by globally:

YandexDelivery::Request.logger = MyLogger.new

Примеры

Варианты доставки

Поиск вариантов доставки

# для Rails senderId указывать не обязательно, в запрос подставится значение из config/yandex_delivery2.yml
body = {
  :to=>{:location=>"Санкт-Петербург"}, 
  :dimensions=>{:length=>1, :height=>1, :width=>1, :weight=>1}
}

YandexDelivery::Request.delivery_options.upsert(body: body)

Поиск пунктов выдачи заказов

YandexDelivery::Request.pickup_points.upsert(body: {locationId: 2})

Операции с заказами

Создать черновик заказа

response = YandexDelivery::Request.orders.create(body: {deliveryType: 'COURIER'})
order_id = response.body

Обновить черновик заказа

YandexDelivery::Request.orders(order_id).upsert(body: {deliveryType: 'PICKUP'})

Оформить заказ

YandexDelivery::Request.orders.submit.create(body: {orderIds: [order_id]})

Получить данные о заказе

response = YandexDelivery::Request.orders(order_id).retrieve
order = response.body

Удалить заказ

YandexDelivery::Request.orders(order_id).delete

Получить ярлык заказа

YandexDelivery::Request.orders(order_id).label.retrieve

Поиск заказов

sender_ids = YandexDelivery.senders.map{|sender| sender['id']}
YandexDelivery::Request.orders.search.upsert(body: {senderIds: sender_ids, orderIds: [order_id]})

Получить историю статусов заказа

YandexDelivery::Request.orders(order_id).statuses.retrieve

Получить статус заказов

YandexDelivery::Request.orders.status.upsert

Операции с отгрузками

Создать заявку на отгрузку

body = {
  cabinetId: YandexDelivery.client['id'],
  shipment: {
                type: "WITHDRAW",
                date: "2020-10-05",
                warehouseFrom: YandexDelivery.warehouses.first['id'],
                warehouseTo: 123,
                partnerTo: 678
              },
  intervalId: 765478,
  dimensions: {
                length: 10,
                width: 15,
                height: 40,
                weight: 5.5
               },
  courier: {
                type: "CAR",
                firstName: "Василий",
                middleName: "Иванович",
                lastName: "Пупкин",
                phone: "+79998887766",
                carNumber: "о000оо",
                carBrand: "Maybach"
            },
  comment: "comment"
}
response = YandexDelivery::Request.shipments.application.create(body: body)
shipment_id = response.body['id']

Подтвердить отгрузку

body = {
  cabinetId: YandexDelivery.client['id'],
  shipmentApplicationIds: [shipment_id]
}
YandexDelivery::Request.shipments.application.submit.create(body: body)

Получить список отгрузок

body = {
          cabinetId: YandexDelivery.client['id'],
          shipmentType: "IMPORT",
          dateFrom: "2020-10-05",
          "dateTo": "2020-11-05",
          "partnerIds": 
          [
            239847,
            98234,
            54968
          ]
       }
YandexDelivery::Request.shipments.search.upsert(body: body)

Получить интервалы самопривозов

warehouse_id = YandexDelivery.warehouses.first['id']
YandexDelivery::Request.shipments.intervals.import.retrieve(params: {warehouseId: warehouse_id, date: '2020-10-06'})

Получить интервалы заборов

YandexDelivery::Request.shipments.intervals.withdraw.retrieve(params: {partnerId: 106, date: '2020-10-06'})

Получить акт передачи заказов

YandexDelivery::Request.shipments.applications(shipment_id).act.retrieve(params: {cabinetId: YandexDelivery.client['id']})

Справочные данные

Получить полный адрес

YandexDelivery::Request.location.retrieve(params: {term: 'Санкт-Петербург'})

Получить индекс по адресу

response = YandexDelivery::Request.location.postal_code.retrieve(params: {address: 'Санкт-Петербург, ул. Профессора Попова, д. 37Щ, БЦ "Сенатор"'})
postal_code = response.body.first[:postalCode]

Получить список служб доставки

YandexDelivery::Request.delivery_services.retrieve(params: {cabinetId: YandexDelivery.client['id']})