Проблема сохранения сессии при переходе к оплате на Робокассу

Тема в разделе "Ошибки и их решения", создана пользователем versemaker, 5 июн 2021.

  1. Ron

    Ron Новичок

    Сообщения:
    6
    Симпатии:
    0
    Решение проблемы для версии 3.0.3.7: Изменить PHP7.4 на 7.3 в настройке хостинга. Это уберет ошибку при переходе на успешную страницу оплаты. Чтобы не происходил разлогин клиента и очищалась корзина, в разделе "Интерфейс" в кабинете Интеркассы - измените тип запроса POST на GET для "URL успешной оплаты" и "URL неуспешной оплаты". После этого модуль начинает работать корректно. Могу предположить что для Робокассы решение проблемы идентично.
     
  2. Skiff

    Skiff Новичок

    Сообщения:
    1
    Симпатии:
    0
    Вот и у меня аналогичная проблема! :(

    На сколько понимаю, модуль перестанет понимать, когда заказ оплачен?
     
  3. arizold

    arizold Новичок

    Сообщения:
    1
    Симпатии:
    0
    OpenCart версия 3.0.3.7.

    1. В catalog\controller\extension\payment\robokassa.php в методе success есть такая строка:

    $session->data['user_id'] = $this->customer->getId();

    Она не нужна. Здесь видимо ошибка, т.к. user и customer - это разные сущности. В итоге из-за этого просто выкидывает админа из админки.

    2. Метод POST действительно не работал - тоже выкидывало пользователя из личного кабинета. Сделал через метод GET. Здесь также нужно чтобы обратный URL был добавлен через SEO URL например (без GET параметров), иначе Робокасса не дает добавить его.

    Но если переставлять на GET, то там же в catalog\controller\extension\payment\robokassa.php в методах success и result надо обновить переменные $out_summ, $order_id и $crc. Например, так:

    if (isset($this->request->post['OutSum'])) {
    $out_summ = $this->request->post['OutSum'];
    } else {
    $out_summ = $this->request->get['OutSum'];
    }

    if (isset($this->request->post['InvId'])) {
    $order_id = $this->request->post["InvId"];
    } else {
    $order_id = $this->request->get['InvId'];
    }

    if (isset($this->request->post['SignatureValue'])) {
    $crc = $this->request->post["SignatureValue"];
    } else {
    $crc = $this->request->get["SignatureValue"];
    }