Почему брошенные корзины не принимаются обратно?
Суть проблемы. Например, пользователь заходит на сайт и авторизуется. Затем он кладет товар в корзину и уходит. Брошенная корзина остается в системе. Через некоторое время пользователь возвращается, но брошенную корзину не забирает. Если посмотреть на страницу администратора, то корзина привязана к нужному пользователю. Однако при переходе на страницу корзины появляется сообщение об ошибке, в котором говорится, что корзина пуста.
В процессе поиска я обнаружил такую особенность: корзина Битрикс не связана напрямую с пользователем через ID покупателя (таблица b_sale_fuser ), поэтому эти ID запутаны. Существует два способа получения этих идентификаторов
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().
Можно ли как-то повлиять на такое поведение? Или я что-то упустил в конфигурации битрикса?
Этот вопрос был задан более 3 лет назад
1192 Просмотров
Комментарий.
Решение вопроса 1
nikegk @nikegk Автор вопроса.
Мне удалось выявить и решить проблему методом исключения.
Проблема заключалась в том, что событие after-authorise перехватывалось в init. php и перенаправлялось так, как описано здесь Техническая поддержка Битрикс подтвердила, что реализация такого перенаправления, вероятно, означает, что некоторые методы каталога API не успевают сработать, в результате чего некоторые В техподдержке Битрикс мне сказали, что при реализации такого редиректа, вероятно, не успевают сработать некоторые методы каталога API, в результате чего пользователь имеет в системе два разных fuser_ids.
Устранение этого редиректа также позволило решить еще один вопрос, который я поднимал ранее.
Комментарии