Перейти к содержанию
Dimyan

[Решено] Ссылка из письма заказа ведет не туда если пользователь logout

Рекомендуемые сообщения

Здравствуйте!

Прошу прощения если тема уже поднималась, но я не смог найти.

Ситуация такая:

После оформления заказа приходит письмо с деталями заказа:

Для просмотра Вашего заказа перейдите по ссылке: http:// shop-url/index.php?route=account/order/info&order_id=4

Если по ней перейти когда клиент авторизован на сайте, то все нормально, переход осуществляется в историю заказа.

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

Подскажите пожалуйста, что это за ерунда и как избавится, нахрапом роутинг opencarta понять у меня не получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что в контроллере, отвечающем за просмотр заказа (account/order/info), для незалогиненного пользователя в сессии сохраняется неверная ссылка для редиректа после входа:

if (!$this->customer->isLogged()) {
   $this->session->data['redirect'] = $this->url->link('account/order', 'order_id=' . $order_id, 'SSL');
  // После входа пользователь автоматически проследует по этой ссылке
   $this->redirect($this->url->link('account/login', '', 'SSL'));
	 }
Но дело в том, что это другой метод данного контроллера (account/order/index), который отвечает за повтор заказа, причем данному методу передается номер заказа, который пользователь изначально хотел просмотреть по ссылке из письма, т.е. все товары из данного заказа попадут в корзину и пользователь будет перенаправлен на корзину/оформление заказа.

Исправляется это корректировкой ссылки для редиректа после входа, то есть в методе account/order/info нужно найти формирование ссылки

$this->session->data['redirect'] = $this->url->link('account/order', 'order_id=' . $order_id, 'SSL');
и заменить ее на правильную

$this->session->data['redirect'] = $this->url->link('account/order/info', 'order_id=' . $order_id, 'SSL');
Данный баг обнаружил только в 1.5.3 (дефолтном и ocstore)
  • +1 5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

deeman, большое спасибо!

Подозреваю разработчики просто забыли дописать /info :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо deeman. А то некоторые мои клиенты видимо по этой причине и косячили с заказами. Вместо того, чтобы зайти свой заказ просмотреть, начинали точно такой же оформлять, или жаловались, почему как ни зайдут по ссылке из письма, так в корзине все удваивается и удваивается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

deeman, огромное спасибо. Очень долго пытался отловить этот баг!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вдуплюсь))). Это нужно менять в public function info() или в public function index() или в двух местах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вдуплюсь))). Это нужно менять в public function info() или в public function index() или в двух местах?

public function info()
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо. Так и сделал, а потом закрались сомнения))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.