Хелпер плагина...

Хелпер плагина Интеграция СДЭК

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

Мы предполагаем, что у вас есть навыки редактирования шаблонов, знания синтаксиса шаблонизатора Smarty, позволяющие использовать этот хелпер.

В хелпере реализованы методы:

  • calc() для расчета стоимости по тарифам СДЭК. Именно результат, рассчитываемый СДЭК, без учета наценок, настроенных для конкретных методов доставки!
  • city() для поиска города в списке городов СДЭК. Это, скорее, вспомогательный метод, который поможет отыскать идентификатор города по реестру СДЭК
  • points() список пунктов выдачи в городе. Просто массив.
  • pointsHtml() список пунктов выдачи, пригодный для показа.
  • pointInfo() Отображает информацию о пункте выдачи (или выдает массив с информацией)

Вызов хелпера

В шаблоне можно использовать его:

{$result = $wa->shop->sdekint->calc(....)}
{$points = $wa->shop->sdekint->points(....)}

Также методы calc(), city() и points() можно запрашивать с помощью GET-запроса из JS-скрипта. В качестве GET-параметров формы нужно передать массив data с параметрами для хелпера. Методы хелпера доступны по URL <url_поселения_магазин>/sdekint/helper/<метод>.

Пример формирования в шаблоне URL для вызова метода city:

{$city_url = $wa->getUrl('helper/calc', ['plugin'=>'sdekint'])}

В ответ на запрос вернется объект JSON, в свойстве data которого будет содержаться ответ со структурой, аналогичной той, что возвращается при вызове метода из шаблона

Получение информации о городе из реестра СДЭК

Информацию о городе можно получить, указав код страны, код региона и название города. Код региона играет роль только для городов РФ, для остальных стран можно указывать null или вообще не указывать. Все параметры передаются в виде ключей массива. Пример запроса информации о Костроме:

{$sdek_city = $wa->shop->sdekint->city(['country'=>'rus', 'region'=>'44', 'name'=>'кострома'])}

В результате переменная $sdek_city будет содержать структурированный массив такого вида:

array (
  'name' => 'Кострома',
  'sdek_id' => 165,
  'max_cod' => NULL,
  'country' => array (
    'iso3' => 'rus',
    'name' => 'Российская Федерация',
  ),
  'region' => array (
    'code' => '44',
    'name' => 'Костромская область',
  ),
)

элемент sdek_id содержит идентификатор города по реестру СДЭК, а элемент max_cod информацию о максимальном размере наложенного платежа для этого города: либо число в рублях, либо NULL если ограничения по сумме наложенного платежа нет.

Запрос JSON данных по url sdekint/helper/city:

var url = '{$wa->getUrl("helper/city", ["plugin"=>"sdekint"])}';
$.get(
  url, 
  {
    data: {
      country:'rus',
      region:'44',
      name: 'кострома'
    }
  },
  function(result) {
    // обработка результата
  }
)

Получение списка пунктов выдачи в городе

Чтобы получить список пунктов выдачи заказов в городе нужно вызвать метод points() хелпера и передать ему в качестве параметра такой же массив, как для метода city():

{$points = $wa->shop->sdekint->points(['country'=>'rus', 'region'=>'44', 'name'=>'кострома'])

В ответ будет получен массив структурированных данных о каждом пункте выдачи в городе. Или пустой массив, если пунктов выдачи нет. Примерно такой:

array (
  0 => array (
    'code' => 'KST8',
    'name' => 'На Пятницкой',
    'work_time' => 'пн-пт 10:00-19:00, сб 10:00-16:00',
    'address' => 'ул. Пятницкая, 39/1, пом.1',
    'phone' => '74942302899',
    'note' => '',
    'min_weight' => '0',
    'max_weight' => '30',
    'geo' => array (
      'lat' => '57.772500',
      'lon' => '40.926642',
    ),
    'country' => array (
      'iso3' => 'rus',
      'name' => 'Российская Федерация',
    ),
    'region' => array (
      'code' => '44',
      'name' => 'Костромская область',
    ),
    'city' => array (
      'name' => 'Кострома',
      'sdek_id' => 165,
      'max_cod' => NULL,
    ),
  ),
  1 => array (
    'code' => 'KST7',
    'name' => 'На Сутырина',
    'work_time' => 'пн-пт 09:00-19:00, сб 09:00-16:00, вс 10:00-16:00',
    'address' => 'ул. Сутырина, 15а',
    'phone' => '74942641163',
    'note' => 'примечание к адресу: отдельно стоящее одноэтажное кирпичное здание.',
    'min_weight' => NULL,
    'max_weight' => NULL,
    'geo' => array (
      'lat' => '57.742710',
      'lon' => '40.996979',
    ),
    'country' => array (
      'iso3' => 'rus',
      'name' => 'Российская Федерация',
    ),
    'region' => array (
      'code' => '44',
      'name' => 'Костромская область',
    ),
    'city' => array (
      'name' => 'Кострома',
      'sdek_id' => 165,
      'max_cod' => NULL,
    ),
  ),
)

В элементах min_weight и max_weight содержатся значения минимального и максимального веса посылок, с которыми работает этот пункт выдачи. В элементе geo содержатся координаты широты и долготы пункта выдачи. В элементе code — код пункта выдачи по реестру СДЭК

Запрос JSON данных по url sdekint/helper/points:

var url = '{$wa->getUrl("helper/points", ["plugin"=>"sdekint"])}';
$.get(
  url, 
  {
    data: {
      country:'rus',
      region:'44',
      name: 'кострома'
    }
  },
  function(result) {
    // обработка результата
  }
)

Список ПВЗ с картой

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

Параметры, передаваемые в метод хелпера, аналогичны параметрам для метода points()

{$wa->shop->sdekint->pointsHtml(['country'=>'rus', 'region'=>'44', 'name'=>'кострома'])}

В результате на странице должен показаться список ПВЗ вместе с картой

Расчет стоимости доставки

Расчет стоимости доставки сейчас показывает только стоимость тарифа СДЭК без учета наценок, настроенных в ваших методах доставки. Мы работаем над этим.

Вызов хелпера:

{$wa->shop->sdekint->calc([
  'from' => ['country'=>'rus', 'region'=>'77', 'name'=>'москва']
  'to'=>['country'=>'rus', 'region'=>'44', 'name'=>'кострома'],
  'tariff'=>[136,137],
  'weight'=>0.5,
  'size'=>[10,10,15]]
)}

Параметры:

  • from — необязательный параметр, город отправления. По умолчанию используется город отправления из настроек плагина "Интеграция СДЭК". Можно указать массив с ключами country, region и name: 'from'=>['country'=>'rus', 'region'=>'77', 'name'=>'москва'], можно просто код города из реестра городов СДЭК: 'from'=>'44'
  • to — обязательный. Также, как город отправления может быть либо массивом с ключами country, region, name или просто кодом города из реестра городов СДЭК.
  • tariff — необязательный параметр с тарифом или тарифами, которые нужно считать. По умолчанию считаются два тарифа Посылка склад-склад и склад-дверь. Параметр может быть просто кодом тарифа СДЭК: 'tariff'=>'136', может быть массивом кодов тарифов: 'tariff'=>[136, 137], может быть строкой, например 'tariff'=>'pvz'. Возможные значения строки:
    • 'pvz', 'point' или 'point-point' — будет посчитан тариф "Посылка" склад-склад (136)
    • 'courier', 'point-door' — будет посчитан тариф "Посылка склад-дверь (137)
    • 'door-point' — будет посчитан тариф "Посылка" дверь-склад (138)
    • 'door-door' — будет посчитан тариф "Посылка" дверь-дверь (139)
  • weight — необязательный параметр с весом отправления в килограммах. По умолчанию 0.5 кг.
  • size — необязательный параметр с массивом габаритов отправления в сантиметрах. Укажите в массиве три размера, например: 'size'=>[10,15,20]. По умолчанию равен [5,5,5]

Результат выполнения хелпера в виде массива с результатами расчета по каждому тарифу:

array (
  136 => 
  array (
    'price' => 210,
    'tariffId' => 136,
    'currency' => 'RUB',
    'min_days' => 1,
    'max_days' => 2,
    'min_date' => '2018-06-01',
    'max_date' => '2018-06-04',
    'tariff' => 
    array (
      'id' => 136,
      'name' => 'Посылка',
      'from' => 'stock',
      'to' => 'stock',
      'group' => 'Посылка',
      'description' => 'Услуга экономичной доставки товаров по России для компаний, осуществляющих дистанционную торговлю',
      'min-weight' => 0,
      'max-weight' => 30,
    ),
  ),
  137 => 
  array (
    'price' => 350,
    'tariffId' => 137,
    'currency' => 'RUB',
    'min_days' => 1,
    'max_days' => 2,
    'min_date' => '2018-06-01',
    'max_date' => '2018-06-04',
    'tariff' => 
    array (
      'id' => 137,
      'name' => 'Посылка',
      'from' => 'stock',
      'to' => 'door',
      'group' => 'Посылка',
      'description' => 'Услуга экономичной доставки товаров по России для компаний, осуществляющих дистанционную торговлю',
      'min-weight' => 0,
      'max-weight' => 30,
    ),
  ),
)
Последнее обновление: 11 сентября 2022
Вадим Страхов разработчик