Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Очистить брошенные корзины с помощью API 1С-Битрикс

Просмотров: 330

Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их очистить. Включая и корзины зарегистрированных пользователей, которые просто не дооформили заказ. При этом используя API 1С-Битрикс, а не прямые запросы в базу данных.

Вообще, в модуле каталога есть такая настройка "Сохранять корзину (дней):" в которой можно указать количество дней, после которого брошенная корзина удаляется.

Очистить брошенные корзины с помощью API 1С-Битрикс

Но, по какой-то причине эта настройка не работает ни на одном сайте. И судя по тому, сколько тем создано на форуме, по данному вопросу, не работает настройка ни у кого.

На нескольких сайтах нашел способ удаления брошенных корзин с помощью прямого запроса в базу данных. Но этот способ мне не нравится, какой-то он не гибкий и монструзно не очевидный.

Получаем все корзины, всех пользователей через API и удаляем

Все просто: получаем все корзины всех пользователей (включая не зарегистрированных) методом \Bitrix\Sale\Basket::getList и очищаем.

use \Bitrix\Main\Loader;

Loader::includeModule('catalog');

$obBasket = \Bitrix\Sale\Basket::getList(
    array(
        'select'  => array(
            'FUSER_ID'
        ),
        'filter' => array(
            'ORDER_ID' => 'NULL',
        ),
    )
);
while($bItem = $obBasket->Fetch()){
    CSaleBasket::DeleteAll(
        $bItem['FUSER_ID'],
        False
    );
}
  • Для удаления корзин нам достаточно знать только FUSER_ID - ID пользователя владельца корзины (это не тоже самое что USER_ID).
  • Отбираем корзины не связанные с заказом 'ORDER_ID' => 'NULL', то есть не оформленные корзины.
  • C помощью CSaleBasket::DeleteAll, зная FUSER_ID владельца, удаляем корзину.
Этот способ более очевидный и более гибкий, нежели прямые запросы в БД: можно очищать корзины по параметрам, добавляя в фильтр нужные отборы.
Например: только корзины за определный период или корзины определенных пользователей.

Очистить брошенные корзины за заданный период

Что бы не запускать этот скрипт вручную, можно сделать консольный скприт и запускать его по расписанию.

И, наверное, не стоит очищать все корзины, пользователь может вернуться на сайт и дооформить заказ. Лучше очищать корзины старше определенного периода. Например: корзины которые не были оформлены за последние 15 дней оставляем, остальные удаляем.

$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
// скрипт для запуска по cron
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);

require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
@set_time_limit(0);

use \Bitrix\Main\Loader;

Loader::includeModule('catalog');

$date = date('d.m.Y', time() - 86400 * 15);
$obBasket = \Bitrix\Sale\Basket::getList(
    array(
        'select'  => array(
            'FUSER_ID'
        ),
        'filter' => array(
            'ORDER_ID' => 'NULL',
            '<=DATE_INSERT' => $date
        ),
    )
);
while($bItem = $obBasket->Fetch()){
    CSaleBasket::DeleteAll(
        $bItem['FUSER_ID'],
        False
    );
}

В переменной $date держим текущую дату за минусом 15-ти дней и используем в фильтре корзин '<=DATE_INSERT' => $date, получая корзины старше 15-ти дней.

Увеличить или уменьшить срок можно тут 86400 * 15, меняя цифру перемножения на 86400 секунд (это 1 день).

Михаил Базаров 06.11.2022
ORM  getList - шпаргалка

'select'  => ... // имена полей, которые необходимо получить в результате
'filter'  => ... // описание фильтра для WHERE и HAVING
'group'   => ... // явное указание полей, по которым нужно группировать результат
'order'   => ... // параметры сортировки
'limit'   => ... // количество записей
'offset'  => ... // смещение для limit
'runtime' => ... // динамически определенные поля

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 11378 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Как вывести картинки к разделам на базе _ext меню Просмотров: 7069 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс Просмотров: 15280 Достаточно часто, при проверке параметров системы, в Битрикс, можно увидеть одну из ошибок... Как работает система сертификации партнеров 1С-Битрикс, уровни партне... Просмотров: 3456 Сертификация от «1С-Битрикс» – это объективная оценка знаний и практических навыков разраб... Простые калькуляторы в карточке товара каталога на Битрикс Просмотров: 15370 На одном из создаваемых сайтов было необходимо сделать небольшой калькулятор и предварител... Хостинг панель BrainyCp: оптимизация под 1С-битрикс Просмотров: 7503 В этой видео-заметке расскажу как установить и оптимизировать панель управления сервером B... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8207 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 34442 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27711 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Отфильтровать новости в Битрикс за заданный период Просмотров: 15553 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Список новостей с автопрокруткой через overflow:scroll Просмотров: 5580 Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточн... Скопировать номер телефона из поля пользователя в телефон для регистр... Просмотров: 1593 Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режи... Заполнить картинки разделов каталога из картинок товаров Просмотров: 324 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Вывести новости из конкретного раздела инфоблока Битрикс Просмотров: 53388 Бывает что требуется вывести конкретные новости или статьи из одного раздела инфоблока в Б... Вывести минимальную цену торговых предложений в Битрикс Просмотров: 26825 Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда т... Бонус за выполненный заказ на внутренний счет пользователя Просмотров: 4234 Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить п... Кастомизация компонента восстановления пароля bitrix:system.auth.forg... Просмотров: 24736 Достаточно часто спрашивают как кастомизировать компонент восстановления пароля пользовате... Подключение SSL на Битрикс виртуальная машина Просмотров: 11894 С первого января 2017 года, наличие безопасного соединения HTTPS становится практически об... Определить местоположение пользователя и показать магазины поблизости... Просмотров: 1143 Задача: в мобильном приложении, которое открывает сайт на 1С-Битрикс внутри себя, нужно оп... XML в формате Commerce ML-2, города России и Мира, для выгрузки в инф... Просмотров: 6285 Подвернулась задачка, создать инфоблок для Битрикс, в котором будут просто города России и...