С недавнего времени в моих интернет-магазинах где идет подсчет стоимости доставки с помощью сервера почты России и их калькулятора, пошло снижение количества заказов, связанное с тем что сервер просто на просто лежит, люди не могут оформить заказ этой службой. Эту ситуацию надо было исправлять, я решил обезопасится, стал запрашивал данные для доставки на другом сервисе с бесплатным API называется он www.postcalc.ru.
Начнем , для начала вам надо скопировать обработчик почты россии delivery_russianpost.php из папки /bitrix/modules/sale/ru/delivery/ в папку /bitrix/php_interface/include/sale_delivery/ если папок нет то создайте их, это нужно для того что бы при обновлении наши правки не исчезли.
if (strstr($data, DELIVERY_RUSSIANPOST_VALUE_CHECK_STRING))
{
Оно необходимо для того что бы написать пользователю о том что ответ от сервера не получен.
Давайте сейчас замес-то этого напишем обработчик который будет все таки пытаться взять еще где либо данный о доставке а будем брать мы их не сайте www.postcalc.ru.
Если вы обратили внимание тут есть две функции encoding() и encodingKey() они срабатывают в том случае если наш сайт в кодировке utf-8 , дело в том что ответ от сервиса на русском языке, в итого получаем не читаемые строки без этой обработки. Добавим эти функции в начале файла до class CDeliveryRUSSIANPOST.
function encoding(&$data,$in,$to)
{
if (is_array($data))
{
foreach($data as $key => $value)
{
if ( is_array($data[$key]) )
{
encoding($data[$key],$in,$to);
}
else
{
$data[$key] = iconv($in,$to,$value);
}
}
}
else
{
$data = iconv($in,$to,$value);
}
}
function encodingKey($data,$in,$to) {
foreach($data as $k=>$v) {
unset($data[$k]);
$k = iconv($in,$to,$k);
$k = strtolower($k);
$data[$k] = $v;
foreach($data[$k] as $k2=>$v2) {
unset($data[$k][$k2]);
$k2 = iconv($in,$to,$k2);
$k2 = strtolower($k2);
$data[$k][$k2] = $v2;
}
}
return $data;
}
class CDeliveryRUSSIANPOST
Вот и все, теперь если сервер почты россии под каким либо предологом не хочет давать нам данные мы попробуем взять их с другого места, обезопасились. Источник тут.
Тем не менее, считает, вроде, правильно. Внедрил у себя, все работает. Только из &w=2 двойку нужно убрать — это вес бандероли и к чему она там непонятно. Кроме того, стоит кешировать результат.
Есть мнение, что нынешние проблемы с расчетом суммы доставки Почтой России связаны не с перебоями в работе их серверов, а с целенаправленной борьбой с ботами. В этой связи, данное решение как никогда кстати.
Чей проект не знаю, API было написано что бесплатное поэтому и взял, цифру 2 убрал из веса опечатался . Кэшировать не стал так как решение это будет отрабатывать только в том случае когда почта России молчит, не стал заморачиватся во общем, если сделаешь и дашь пример реализации подправлю статью.
На деле мнение, что там идет целенаправленная борьба, подтвердились. Что касается краткосрочного решения проблемы, то его идею выложил на хабре: http://habrahabr.ru/post/151097/
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».