Автор Тема: В PaymentModule.php возникает Fatal Error при проверке на $secure_key  (Прочитано 491 раз)

06 Октябрь 2020, 08:12:57
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
День добрый,

Периодически в PaymentModule.php  возникает Fatal Error при проверке на $secure_key.

if ($secure_key !== false && $secure_key != $this->context->cart->secure_key) {
                PrestaShopLogger::addLog('PaymentModule::validateOrder - Secure key does not match', 3, null, 'Cart', (int)$id_cart, true);
                die(Tools::displayError());
}

При этом в ps_log пишется следующая ошибка:
PaymentModule::validateOrder - Secure key does not match, т.е. Безопасный ключ не совпадает

Как я понял:
Поле secure_key генерируется
$this->secure_key = md5(uniqid(rand(), true));
и сохраняется при регистрации пользователя в таблице ps_customer.
В платежных модулях используется для верификации пользователя.
$bankwire->validateOrder($cart->id, Configuration::get('PS_OS_BANKWIRE'), $total, $bankwire->displayName, NULL, array(), (int)$currency->id, false, $customer->secure_key);
В итоге получается, что при совершении заказа поле secure_key в таблице ps_cart не совпадает с полем secure_key в таблице ps_customer.

Из-за чего может происходить такой рассинхрон (возможно из-за смены пароля)?
Насколько критично отключить проверку на secure_key?
Варианты для выхода из этой ситуации?

Возможно сталкивались уже с подобным?

В наличии PS 1.6
06 Октябрь 2020, 10:49:24
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Так бывает когда клиент не сразу совершает покупку, когда большой срок сохранения корзин, когда клиент скидывает кеш у себя и при кастомизации формы (шаблон, контроллер,класс) заказа.
Причину искать нужно, отключать провеку на secure_key плохая идея. Лучше тогда заказ в один клик использовать без регистации.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
06 Октябрь 2020, 11:50:42
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Насколько исправит ситуацию разлогинивание mylogout?

if ($secure_key !== false && $secure_key != $this->context->cart->secure_key) {
                $this->context->customer->mylogout();
06 Октябрь 2020, 15:16:58
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Зависит от причины ошибки. Если проблема в сроке сессии, то поможет. Но для клиента это будет не удобно, ему придеться заново совершать покупку.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
07 Октябрь 2020, 07:44:44
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите пожалуйста, а в каких ситуациях может изменяться $secure_key.
07 Октябрь 2020, 12:29:26
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Он хранится в сессиях, изменяется когда время жизни сессии заканчивается.
Проблемы могут быть как на стороне клиента, так и на стороне сервера.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
07 Октябрь 2020, 12:38:55
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Проверьте в админке в Администрация > Настройки
Срок действия cookies на страницах магазина
Если не поможет, то можно в Настройки > Общие настройки отключить токены в магазине в Улучшить безопасность магазина - Нет.
08 Октябрь 2020, 09:02:03
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Проверьте в админке в Администрация > Настройки
Срок действия cookies на страницах магазина
Если не поможет, то можно в Настройки > Общие настройки отключить токены в магазине в Улучшить безопасность магазина - Нет.

Подскажите, какая из двух зол меньше?
1.  в Настройки > Общие настройки отключить токены в магазине в Улучшить безопасность магазина - Нет.
2. удалить проверку на secure_key в в PaymentModule.php?
if ($secure_key !== false && $secure_key != $this->context->cart->secure_key) {
//die(Tools::displayError());
}

Заранее большое спасибо!
08 Октябрь 2020, 11:23:48
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Лучше использрвать базовые функции движка,  Настройки > Общие настройки отключить токены в магазине в Улучшить безопасность магазина - Нет.