Skip to content
This repository has been archived by the owner on Jul 21, 2021. It is now read-only.

2.1 CalculateShipping

gordlashan edited this page Dec 1, 2020 · 18 revisions

Данный метод реализует общий приближенный расчет доставки. Возвращает список доступных методов доставки в зависимости от указанных параметров, если они есть.

Чтобы использовать этот метод, нужно воспользоваться следующим кодом

use ShiptorRussiaApiClient\Client\Shiptor;

require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php';

$shiptor = new Shiptor();

$shiptor->PublicEndpoint()->calculateShipping();

Список обязательных методов

  • setLength(<длина, см>) Задает габарит длины отправления в сантиметрах, аргумент должен быть числом.

  • setWidth(<ширина, см>) Задает габарит ширины отправления в сантиметрах, аргумент должен быть числом.

  • setHeight(<высота, см>) Задает габарит высоты отправления в сантиметрах, аргумент должен быть числом.

  • setWeight(<вес, кг>) Задает вес отправления в килограммах, аргумент должен быть числом.

  • setCod(<стоимость, руб>) Задает величину наложенного платежа в рублях, аргумент должен быть числом. Если наложенный платеж отсутствует, передается 0.

  • setDeclaredCost(<стоимость, руб>) Задает величину объявленной ценности в рублях, аргумент должен быть числом. Не может быть меньше 10 руб. Если задан параметр наложенного платежа, тогда объявленная стоимость должна быть равна величине наложенного платежа (это делается автоматически, если был указан наложенный платеж больше 0 руб)

  • setKladrId("<КЛАДР>") Задает КЛАДР код местоположения точки назначения. Аргумент должен быть строкой, содержащей КЛАДР код пункта назначения. У этого метода есть вспомогательный метод-обертка inMoscow(), позволяющий установить в качестве пункта назначения доставки Москву и не требующий передачи аргументов. Идентичен вызову метода setKladrId("77000000000").

  • setStock(boolean) Задает признак склада, true - от склада, false - сквозные

  • setKladrIdFrom("<КЛАДР>") задает КЛАДР код исходящего местоположения;

Список необязательных методов

  • setCountryCode("<код страны>") позволяет указать символьный код страны назначения. Среди доступных вариантов RU (РФ), BY (Республика Беларусь) и KZ (Республика Казахстан). У этого метода есть три вспомогательных метода-обертки:

    • forRu() (идентичен вызову метода setCountryCode("RU"));
    • forBy() (идентичен вызову метода setCountryCode("BY"));
    • forKz() (идентичен вызову метода setCountryCode("KZ")).
  • setCourier("<код курьерской службы>") позволяет ограничить возвращаемый список методов доставки конкретной курьерской службой. Среди доступных вариантов: shiptor, boxberry, dpd, iml, russian-post, pickpoint, cdek, shiptor-one-day, shiptor-oversize. Немножественный, т.е. задать можно только одну службу, последующие вызовы будут перезаписывать старое значение новым. У этого метода есть следующие вспомогательные методы-обертки:

    • forShiptorCourier() (идентичен вызову метода setCourier("shiptor"));
    • forShiptorToday() (идентичен вызову метода setCourier("shiptor-one-day"));
    • forShiptorOversize() (идентичен вызову метода setCourier("shiptor-oversize"));
    • forBoxberry() (идентичен вызову метода setCourier("boxberry"));
    • forDpd() (идентичен вызову метода setCourier("dpd"));
    • forIml() (идентичен вызову метода setCourier("iml"));
    • forRussianPost() (идентичен вызову метода setCourier("russian-post"));
    • forPickpoint() (идентичен вызову метода setCourier("pickpoint"));
    • forCDEK() (идентичен вызову метода setCourier("cdek")).

Пример запроса на расчет доставки

Получим доступные методы доставки со стоимостью для отправления габаритами 10х10х10см3, весом 1кг, с наложенным платежом 1000 руб (и объявленная стоимость также будет 1000 руб) в Москву.

use ShiptorRussiaApiClient\Client\Shiptor,
   ShiptorRussiaApiClient\Client\Core\Response\ErrorResponse;

require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php';

$shiptor = new Shiptor();

$response = $shiptor->PublicEndpoint()->calculateShipping()->setLength(10)->setWidth(10)->setHeight(10)
       ->setWeight(1)->setKladrId("77000000000")->setCod(1000)->setDeclaredCost(1000)->send();

if($response instanceof ErrorResponse):?>
   <p><?php echo $response->getMessage()?></p>
<?php else:?>
   <ul>
       <?php
       $result = $response->getResult();
       foreach($result->getMethodsList() as $method):?>
         <li>
           <ol>
               <li><?php echo $method->getName()?></li>
               <li><?php echo $method->getCategory()?></li>
               <li><?php echo $method->getCourier()?></li>
               <li><?php echo $method->getGroup()?></li>
               <li><?php echo $method->getDescription()?></li>
               <li><?php echo $method->getComment()?></li>
               <li><?php echo $method->getTotalReadable()?></li>
               <li><?php echo $method->getMinDays()?> - <?php echo $method->getMaxDays()?></li>
               <li><?php echo $method->getMinDeclaredCost()?></li>
               <li><?php echo implode(",", $method->getTypes())?></li>
               <li>
                   <ul>
                       <?php
                       foreach($method->getServices() as $service):?>
                       <li>
                           <?php echo $service->getCode()?>: <?php echo $service->getReadable()?>
                       </li>
                       <?php
                       endforeach;
                       ?>
                   </ul>
               </li>
           </ol>
       </li>
   <?php
   endforeach;
     ?>
   </ul>
<?php
endif;

В ответ придет список доступных способов доставки, который можно получить с помощью метода getMethodsList(), перебирая его результат как массив. У каждого элемента такого массива есть вспомогательные методы, позволяющие получить всю необходимую информацию.

  • getId() возвращает идентификатор способа доставки;
  • getName() возвращает название способа доставки;
  • getCategory() возвращает категорию доставки (например, to-door, delivery-point и т.д.);
  • getCourier() возвращает символьный код курьерской службы (например, dpd);
  • getGroup() возвращает уникальный символьный код метода доставки;
  • getDescription() возвращает описание службы доставки;
  • getTotalReadable() возвращает читаемую стоимость доставки в виде строки с указанием валюты;
  • getMinDays() возвращает минимальный срок доставки в днях;
  • getMaxDays() возвращает максимальный срок доставки в днях;
  • getMinDeclaredCost() возвращает минимальную величину объявленной ценности в рублях;
  • getTypes() возвращается все типы доставки, доступные в рамках выбранного метода (например, delivery-point, delivery-locker и т.д.);
  • getTotalSum() возвращает стоимость доставки в виде числа;
  • getTotalCurrency() возвращает валюту стоимости доставки;
  • getServices() возвращает список услуг с детализацией по стоимости в виде массива, у каждого элемента которого есть следующие методы для получения детальной информации:
    • getSum() возвращает стоимость услуги в виде числа;
    • getCurrency() возвращает валюту стоимости услуги;
    • getReadable() возвращает читаемую стоимость услуги в виде строки с указанием валюты.