Для начала копируем обработчик почты России delivery_russianpost.php из /bitrix/modules/sale/ru/delivery/ в папку /bitrix/php_interface/include/sale_delivery/, если папки нет создаем.
Далее ищем строку:
function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) |
и вставляем перед ней функцию:
function GetCurlData($arQuery) {
$data_key = file_get_contents('http://'.DELIVERY_RUSSIANPOST_SERVER.DELIVERY_RUSSIANPOST_SERVER_PAGE.'?'.implode("&", $arQuery));
$bResult = preg_match(
"#<input[^>]+id\s*=[\s'\"]*key[\s'\"]*[^>]+value\s*=[\s'\"]*([-_/=:.a-z0-9@{}&?]+)#is",
$data_key,
$matches
);
if(strlen(trim($matches[1])) > 0) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".DELIVERY_RUSSIANPOST_SERVER."/?".implode("&", $arQuery));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_PORT, DELIVERY_RUSSIANPOST_SERVER_PORT);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "key=".trim($matches[1]));
curl_exec($ch);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
$result = curl_exec($ch);
curl_close($ch);
}
}
|
Далее ищем строчку в функции Calculate:
$data = QueryGetData(
DELIVERY_RUSSIANPOST_SERVER,
DELIVERY_RUSSIANPOST_SERVER_PORT,
DELIVERY_RUSSIANPOST_SERVER_PAGE,
implode("&", $arQuery),
$error_number = 0,
$error_text = "",
DELIVERY_RUSSIANPOST_SERVER_METHOD
);
|
и вставляем перед ней:
CDeliveryRUSSIANPOST::GetCurlData($arQuery);
|
Сохраняем и наслаждаемся работой расчета доставки.