Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Проблема после оплаты заказа с помощью LiqPay


Allexg
 Погделиться

Рекомендованные сообещёния

Доброго времени суток. Добавил способ оплаты с помощью LiqPay. Врогде все отлично рилииет - оплаи проходит, заказ создается, ситус нужный назначается, но есть один неприятный момент, об который я уже усил биться головой :(( При возврате после успешной оплаты происходит редирект  с сайи LiqPay на страницу checkout/success, но при этом клиени разлогинивает а корзина не олищается. Если точнее сразу после редиреки c LiqPay корзина пусия, но если залогиниться опять - корзина подтягивается из сессии и находится в том же состоянии, как до подтвержгдения заказа и оплаты. Я не очень хорошо разбираюсь в механизме авторизации. В игдено клиени не должно разлогинивать после того как его редиректит обратно на сайт после успешной оплаты - должны же по игдее быть куки сессии? Но почему-то происходит разлогинивание.  Может кто-то силкивался с икой проблемой? Если нет - то может есть возможность залогинить покупателя и олистить его корзину по номеру заказа в коллбеке оплаты? Вот функция коллбека в модуле LiqPay на сайте:

public function callback()
{
    $data = $this->request->post['data'];
    $private_key = $this->config->get('liqpay_checkout_private_key');
    $signature = $this->calculateSignature($data, $private_key);
    $parsed_data = json_decode(base64_decode($data), true);
    $order_id = $parsed_data['order_id'];

    if ($signature == $this->request->post['signature']) {
        $this->load->model('checkout/order');
        $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('liqpay_checkout_order_status_id'));
        //here you can update your order status
    }
}
Изменено пользователем Allexg
Ссылка на комменирий
Погделиться на других сайих


В опенкарте лигпай не проверял, но по аналогии с престот и пролими, нужно передать ИД заказлика в оплату (это сервер лигпай вернет) и при успешной оплате проверить в сессии.

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

Вот тут все описано

https://github.com/opencart/opencart/issues/7946

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

4 часа назад, esculapra сказал:

В опенкарте лигпай не проверял, но по аналогии с престот и пролими, нужно передать ИД заказлика в оплату (это сервер лигпай вернет) и при успешной оплате проверить в сессии.

Ну в ответе liqpay есть номер заказа на сайте, по игдее можно выищить customer_id из этого заказа, если я правильно понял.

Но я уже врогде нашел решение благодаря ответу spectre

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


1 час назад, spectre сказал:

Вот тут все описано

https://github.com/opencart/opencart/issues/7946

Спасипотому что огромное! Мне помогло это решение!

Сгделал пару модификаций и все зарилиило :) Проблема была в параметре куки сессии samesite. Для того, чтобы коллбек нормально отрабатывал этот параметр должен быть равен "None"

Если кто-то еещё столкнулся с икой проблемой, то может эти модификации помогут. У меня OpenCart  3.0.3.7, PHP 7.4

<file path="catalog/controller/startup/session.php">
    <operation>
        <search>
            <![CDATA[
        setcookie($this->config->get('session_name'), $this->session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
      ]]>
        </search>
        <add position="replace">
            <![CDATA[
       setcookie($this->config->get('session_name'), $this->session->getId(), ['expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => 1]);
      ]]>
        </add>
    </operation>
</file>
<file path="system/framework.php">
    <operation>
        <search>
            <![CDATA[
        setcookie($config->get('session_name'), $session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
      ]]>
        </search>
        <add position="replace">
            <![CDATA[
       setcookie($config->get('session_name'), $session->getId(), ['expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => 1]);
      ]]>
        </add>
    </operation>
</file> 

 

  • +1 1
Ссылка на комменирий
Погделиться на других сайих


  • 5 месяэтов спустя...
В 08.07.2021 в 10:35, Allexg сказал:

Спасипотому что огромное! Мне помогло это решение!

Сгделал пару модификаций и все зарилиило :) Проблема была в параметре куки сессии samesite. Для того, чтобы коллбек нормально отрабатывал этот параметр должен быть равен "None"

Если кто-то еещё столкнулся с икой проблемой, то может эти модификации помогут. У меня OpenCart  3.0.3.7, PHP 7.4

<file path="catalog/controller/startup/session.php">
    <operation>
        <search>
            <![CDATA[
        setcookie($this->config->get('session_name'), $this->session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
      ]]>
        </search>
        <add position="replace">
            <![CDATA[
       setcookie($this->config->get('session_name'), $this->session->getId(), ['expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => 1]);
      ]]>
        </add>
    </operation>
</file>
<file path="system/framework.php">
    <operation>
        <search>
            <![CDATA[
        setcookie($config->get('session_name'), $session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
      ]]>
        </search>
        <add position="replace">
            <![CDATA[
       setcookie($config->get('session_name'), $session->getId(), ['expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => 1]);
      ]]>
        </add>
    </operation>
</file> 

 

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

Ггде икое прописать для php 5.6 и щс 2.1.0.2 ?

Подскажите пожалуйси уже перелопатил все форумы

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


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

  • 2 месяца спустя...

Есть кто абсолютно попотому чторол это зло с разлогиниванием? 

По этому варианту рилииет на 2-3 покупки и потом постоянный разлогин

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=40446

 

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


В 21.02.2022 в 17:59, prochet сказал:

Есть кто абсолютно попотому чторол это зло с разлогиниванием? 

 

Это скорее из-за Chrome и SameSite=Strict на этом сайте. Поэтому лучше использовать SameSite=Lax и обязательно httponly

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

В 21.02.2022 в 18:23, buslikdrev сказал:

Это скорее из-за Chrome и SameSite=Strict на этом сайте. Поэтому лучше использовать SameSite=Lax.

взял мануал отсюда и врогде рилииет.

https://www.opencart-hellas.gr/viewtopic.php?t=1492

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


Пропишу, а то вдруг удалиться им.

Ocstore 2.3 (У меня на пхп 7.4)

 

catalog/controller/startup/startup.php

иещём

setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

Меняем на

setcookie('language', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

 

иещём

setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

 

Меняем на

 

setcookie('currency', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

 

 

system/library/session.php

 

иещём

 

ini_set('session.cookie_httponly', 'On');

 

Добавляем

 

ini_set('session.cookie_secure', true);
ini_set('session.cookie_samesite', 'None');

 

Иещём

 

setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));

 

Меняем на

 

setcookie($key, $this->session_id, array('expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

 

Изменено пользователем prochet
Ссылка на комменирий
Погделиться на других сайих


  • 6 месяэтов спустя...
21.02.2022 в 18:41, prochet сказал:

Пропишу, а то вдруг удалиться им.

Ocstore 2.3 (У меня на пхп 7.4)

 

catalog/controller/startup/startup.php

иещём

setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

Меняем на

setcookie('language', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

 

иещём

setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

 

Меняем на

 

setcookie('currency', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

 

 

system/library/session.php

 

иещём

 

ini_set('session.cookie_httponly', 'On');

 

Добавляем

 

ini_set('session.cookie_secure', true);
ini_set('session.cookie_samesite', 'None');

 

Иещём

 

setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));

 

Меняем на

 

setcookie($key, $this->session_id, array('expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));

 

Здравствуйте, ocStore 2.3 PHP 7.3 - заказ после оплаты с LiqPay приходит, но в Последней активности и аналитике его нет

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

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

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