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