Быстрый расчет доставки посылок почтой РФ
Приветствую.
На одном сайте понадобилось считать стоимость доставки посылок почтой РФ из г. Благовещенск в г. Москва. Решил с помощью API сайта postcalc.ru
Делюсь. Конструктивная критика и советы приветствуются.
1. Создаем сниппет postCalc
2. Создаем ресурс Расчет доставки
Здесь параметры:
&from — индекс города отправителя
&to — индекс города получателя
&weight — вес посылки в граммах
&val — ценность посылки в рублях
&post_type — тип отправления (0 — ценная посылка, 1 — отправление первым классом, 2 — отправление ЕМС)
Сумма наложенного платежа в районах Крайнего Севера отличается, смотри документацию к API.
Ссылки:
http://postcalc.ru/api.html — документация к API
На одном сайте понадобилось считать стоимость доставки посылок почтой РФ из г. Благовещенск в г. Москва. Решил с помощью API сайта postcalc.ru
Делюсь. Конструктивная критика и советы приветствуются.
1. Создаем сниппет postCalc
<?php
// Инициализируем curl
$curl = curl_init();
curl_setopt_array($curl,
array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'),
CURLOPT_USERAGENT => phpversion()
)
);
//Значения по умолчанию
if (!$from) $from = "675011"; //индекс отправителя (г.Благовещенск Амурской обл.)
if (!$to) $to = "101000"; //индекс получателя (г.Москва)
if (!$weight) $weight = "1000"; //вес в граммах
if (!$val) $val = "0"; //ценность посылки в рублях
if (!$post_type) $post_type = 0; //тип отправления
//Формируем запрос
curl_setopt($curl, CURLOPT_URL, "http://api.postcalc.ru/?f=".$from."&t=".$to."&w=".$weight."&v=".$val."&o=php");
//Отправляем запрос на сервер
$Response = curl_exec($curl);
curl_close($curl);
// Разархивируем ответ сервера api.postcalc.ru
if (substr($Response,0,3) == "\x1f\x8b\x08") {
$Response = gzinflate(substr($Response,10,-8));
}
//Преобразуем ответ в массив
$arrResponse = unserialize($Response);
switch ($post_type){
case 0: $post_type = "ЦеннаяПосылка";break;
case 1: $post_type = "Посылка1Класс";break;
case 2: $post_type = "EMS";break;
};
//Массив плейсхолдеров
$placeholders = array(
'from_index' => $from,
'to_index' => $to,
'weight' => $weight,
'val_price' => $val,
'type' => $arrResponse['Отправления'][$post_type]['Название'],
'price' => $arrResponse['Отправления'][$post_type]['Тариф'],
'insurance' => $arrResponse['Отправления'][$post_type]['Страховка'],
'cost' => $arrResponse['Отправления'][$post_type]['Доставка'],
'time' => $arrResponse['Отправления'][$post_type]['СрокДоставки']
);
// Устанавливаем плейсхолдеры с префиксом
$modx->setPlaceholders($placeholders, 'postcalc.');
2. Создаем ресурс Расчет доставки
[[!postCalc?
&from=`675011`
&to=`101000`
&weight=`1000`
&val=`100`
&post_type=`1`
]]
<p>Тип отправления: <b>[[+postcalc.type]]</b></p>
<p>Индекс отправителя: <b>[[+postcalc.from_index]]</b></p>
<p>Индекс получателя: <b>[[+postcalc.to_index]]</b></p>
<p>Вес отправления: <b>[[+postcalc.weight]] г.</b></p>
<p>Ценность отправления: <b>[[+postcalc.val_price]] р.</b></p>
<p>Тариф: <b>[[+postcalc.price]] р.</b> <br />(Почтовый тариф в рублях без учета страховки)</p>
<p>Страховка: <b>[[+postcalc.insurance]] р.</b> <br />(Только для ценных отправлений с оценкой больше 0: страховка в рублях)</p>
<p>Полная стоимость: <b>[[+postcalc.cost]] р.</b> <br />(Для ценных отправлений с оценкой больше 0: тариф + страховка в рублях. Для остальных отправлений - то же самое, что тариф)</p>
<p>Срок доставки: <b>[[+postcalc.time]] дн.</b> <br />(Сроки примерные, но ориентироваться можно, как показала практика)</p>
Здесь параметры:
&from — индекс города отправителя
&to — индекс города получателя
&weight — вес посылки в граммах
&val — ценность посылки в рублях
&post_type — тип отправления (0 — ценная посылка, 1 — отправление первым классом, 2 — отправление ЕМС)
Сумма наложенного платежа в районах Крайнего Севера отличается, смотри документацию к API.
Ссылки:
http://postcalc.ru/api.html — документация к API
Поблагодарить автора
Отправить деньги
Комментарии: 1
Раньше тоже их использовал, но у почты есть собственный калькулятор otpravka.pochta.ru/specification#/nogroup-rate_calculate
100% актуальность данных + был момент, что postcalc.ru не передавал данные, что доставка до указанного пункта не доступна (из-за погоды было)
100% актуальность данных + был момент, что postcalc.ru не передавал данные, что доставка до указанного пункта не доступна (из-за погоды было)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.