Добрый день.
Суть проблемы.
Например, пользователь заходит на сайт и авторизуется. После чего набирает товары в корзину и уходит. В системе остается брошенная корзина.
Через какое-то время пользователь возвращается, но брошенная корзина к нему не подхватывается. Если посмотреть через админку, то корзина привязана к нужному пользователю. Однако, когда он заходит на страницу корзины ему вываливается ошибка "Ваша корзина пуста".
Покопавшись обнаружил такую особенность. Т.к. корзины в битриксе привязываются к пользователю не напрямую, а через идентификатор покупателя(таблица
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().
Можно ли как-то на это поведение повлиять? Или может я что-то упустил в настройках битрикса?