Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Проблема после оплаты заказа с помощью 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
    }
}
Змінено користувачем Allexg
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах

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 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 ?

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

Надіслати
Поділитися на інших сайтах


Надіслати
Поділитися на інших сайтах

  • 2 months later...

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

По этому варианту работает на 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 months later...
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 приходит, но в Последней активности и аналитике его нет

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.