Для CDEK есть несколько сопособов расчета доставки:
Виджет
Виджет представляет из себя карту с расставленными точками пунктов выдачи. Выбрав любой из пунктов, мы получаем цену курьером или самовывозом и адрес.
Действия:
- Качаем дистрибутив (актуальный по состоянию на 02.03.2020).
- Распаковываем в удобном месте на сайте;
- Инициализируем на странице с оформлением доставки.
Пример кода инициализации:
var cdekWidget = new ISDEKWidjet({
defaultCity: 'Москва',
cityFrom: 'Москва',
country: 'Россия',
link: 'js_cdek_delivery_block',
path: 'assets/components/cdek/widget/scripts/',
servicepath: 'http://sitename.ru/assets/components/cdek/widget/scripts/service.php',
apikey: '47402f77-9ece-411f-b0ab-39177b4a5e84',
onChoose: function(reply) {
var address = reply.PVZ.City + ', ' + reply.PVZ.Address + ', ' + reply.PVZ.AddressComment;
setSelectedAddress(address, reply.id, 'cdek');
}
});
Интеграция
Здесь мы отправляем запрос на адрес СДЭК в формате json с указанием данных.
Понадобится:
- ID города из базы CDEK;
- База CDEK
- Вес, длина, ширина, высота продукта;
Материалы:
База в формате
xls
, поэтому лучше всего ее перевести вSQL
и импортировать вMySQL
.
Пример кода для ajax-коннектора:
if(!empty($_POST['city'])) {
$city = trim(htmlspecialchars($_POST['city']));
$id = trim(htmlspecialchars($_POST['id']));
$resChars = getChars($modx, $id, $arTvs);
$weight = !empty($resChars['weight']) ? $resChars['weight'] / 1000 : $defChars['weight'] / 1000;
$length = !empty($resChars['length']) ? $resChars['length'] : $defChars['length'];
$width = !empty($resChars['width']) ? $resChars['width'] : $defChars['width'];
$height = !empty($resChars['height']) ? $resChars['height'] : $defChars['height'];
$q = "SELECT `ID` FROM modx_cdek_addresses WHERE `FullName` LIKE '%{$city}%'";
$stmt = $modx->query($q);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$id = $result['ID'];
header('Content-Type: application/json');
$post_data = '{
"version":"1.0",
"senderCityId":"44",
"receiverCityId":"' . $id . '",
"tariffId":"1",
"goods":
[
{
"weight":"' . $weight . '",
"length":"' . $length . '",
"width":"' . $width . '",
"height":"' . $height . '"
}
]
}';
$url = 'http://api.cdek.ru/calculator/calculate_price_by_json.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
$output = json_decode(curl_exec($ch), true);
curl_close($ch);
$output['result']['city'] = $city;
echo $modx->parseChunk('cdek_tpl', $output['result']);
}
В документации как для интеграции так и для виджета упоминаются данные пользователя (логин и пароль), Но без них работает!