В плагине Интеграции есть встроенный хелпер, который поможет показывать примерную стоимость доставки в город клиента, список пунктов выдачи в конкретном городе на любой информационной странице приложения магазин или карточке товара.
Мы предполагаем, что у вас есть навыки редактирования шаблонов, знания синтаксиса шаблонизатора 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, ), ), )