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

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

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

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

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

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

На нескольких сайтах я нашёл способ удаления брошенных корзин с помощью прямых запросов к базе данных. Однако этот способ мне не нравится: он кажется недостаточно гибким и излишне «монструозно» очевидным.

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

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

use \Bitrix\Main\Loader;

Loader::includeModule('catalog');
Loader::includeModule('sale');

$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', то есть неоформленные корзины.
  • С помощью 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');
Loader::includeModule('sale');

$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С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

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

Мобильное приложение

от 550 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.