@nikegk

Почему не подхватывается брошенная корзина?

Добрый день.

Суть проблемы.
Например, пользователь заходит на сайт и авторизуется. После чего набирает товары в корзину и уходит. В системе остается брошенная корзина.
Через какое-то время пользователь возвращается, но брошенная корзина к нему не подхватывается. Если посмотреть через админку, то корзина привязана к нужному пользователю. Однако, когда он заходит на страницу корзины ему вываливается ошибка "Ваша корзина пуста".

Покопавшись обнаружил такую особенность. Т.к. корзины в битриксе привязываются к пользователю не напрямую, а через идентификатор покупателя(таблица b_sale_fuser) возникает чехарда с этими идентификаторами. Получить этот идентификатор можно двумя методами:
CSaleBasket::GetBasketUserID();
Sale\Fuser::getId(); // D7

Пока пользователь незалогинен на сайте, оба метода возвращают одинаковые значение (например 2). После авторизации метод CSaleBasket::GetBasketUserID() продолжает отдавать fuser_id 2, а вот метод Sale\Fuser::getId() возвращает fuser_id 1.
Если посмотреть таблицу БД b_sale_fuser, то получается что запись с fuser_id = 1 ссылается на нашего пользователя с той самой брошенной корзиной, а fuser_id = 2 ссылается на user_id = NULL.

Получается одновременно существует две корзины. Самое неприятное заключается в том, что компонент корзины в системе получает содержимое корзины, как раз по ответу метода CSaleBasket::GetBasketUserID().

Можно ли как-то на это поведение повлиять? Или может я что-то упустил в настройках битрикса?
  • Вопрос задан
  • 1354 просмотра
Решения вопроса 1
@nikegk Автор вопроса
Методом исключения получилось определить и решить проблему.

Проблема была в том, что в init.php отлавливалось событие после авторизации и производился редикерт, таким же способом как описывалось тут.
В тех.поддержке битрикса рассказали, что при таком такой реализации редиректа скорее всего не успевают отрабатывать какие-то методы api каталога, в следствие чего в системе у одного пользователя появляется два разных fuser_id.

Отказ от такого редиректа решил и другой вопрос, который я задавал ранее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы