Здесь будет рассмотрен пример расчета стоимости для Почта РФ.
Материалы:
- Ссылка на документацию - документация;
- Регистрация в системе - регистрация
Понадобится:
- Токен пользователя;
- Ключ пользователя;
- Вес, ширина, высота, длина товара;
- Индексы городов отправки и получения посылки
Смысл заключается в отправке запросов на определенный адрес. Авторизируемся посредством заголовков, посылаем данные в формате json
. Поулчаем ответ в формате json.
Вес передается в граммах. Ширина, длина, высота - в сантиметрах.
На стандартном тарифе подсчет ведется до 20кг
Нам отдельно придут 2 параметра - tax-rate (стоимость без НДС) и tax-vat - стоимость НДС. При окончательном вычислении их необходимо сложить
Пример кода для ajax-коннектора:
if(!empty($_POST['pochtaIndex'])) {
$intIndexTo = trim(htmlspecialchars($_POST['pochtaIndex']));
$order = &$_SESSION['shk_order'];
$_SESSION['pochtaIndex'] = $intIndexTo;
if(!empty($order)) {
$intTotalWeight = 0;
foreach($order as $k => $prod) {
//Получаем данные товара
$resChars = getChars($modx, $prod['id'], $arTvs);
//Проверяем на заполненность, если не заполнено - заменяем их из настроек
$order[$k]['weight'] = $resChars['weight'] ? $resChars['weight'] * $prod['count'] : $defChars['set-weight'] * $prod['count'];
$intTotalWeight += $order[$k]['weight'];
}
}
$q = $modx->newQuery('modTemplateVarResource', array('contentid' => 6, 'tmplvarid:IN' => array(52,57,58)));
$obTv = $modx->getCollection('modTemplateVarResource', $q);
$arValues = [];
foreach($obTv as $res) {
$res = $res->toArray();
$arValues[] = $res['value'];
}
list($intIndexFrom, $strToken, $strPass) = $arValues;
$protocol = "https://";
$host = "otpravka-api.pochta.ru";
$path = "/1.0/tariff";
$destination = array(
"index-from" => $intIndexFrom,
"index-to" => $intIndexTo,
"mail-category" => "ORDINARY",
"mail-type" => "POSTAL_PARCEL",
"mass" => 5000,
"dimension" => [
"height" => $defChars['set-height'],
"length" => $defChars['set-length'],
"width" => $defChars['set-width']
],
"fragile" => "false"
);
$url = $protocol . $host . $path;
$data = json_encode($destination, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: AccessToken ' . $strToken,
'X-User-Authorization: Basic ' . $strPass,
'Content-Type: application/json;charset=UTF-8',
'Accept: application/json;charset=UTF-8'
));
$output = curl_exec($ch);
$output = json_decode($output, true);
curl_close($ch);
if(isset($output['ground-rate'])) {
echo ceil(($output['ground-rate']['rate'] + $output['ground-rate']['vat']) / 100);
}else{
echo 0;
}
}