Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Recommended Posts

Доброго времени суток. Добавил способ оплаты с помощью 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
    }
}
Edited by Allexg
Link to comment
Share on other sites


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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites


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
Link to comment
Share on other sites


  • 5 months later...
В 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 ?

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

Link to comment
Share on other sites


Link to comment
Share on other sites

  • 2 months later...

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

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

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

 

Link to comment
Share on other sites


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

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

 

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

Link to comment
Share on other sites

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

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));

 

Edited by prochet
Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.