Drupal+ubercart пропадает сессия после редиректа на платёжную систему. Как найти причину?
Есть магазин на Drupal 7 + Ubercart. В какой-то момент стала теряться информация об оплате ордеров. Т.е. оплата в платёжной системе проходит, но ордер остаётся в состоянии in checkout. В большинстве случаев оплата проходит нормально, но в некоторых случается такая проблема. Т.е. воссоздать ситуацию не выходит. Проблема проявляется при оплате через 2 разные платёжные системы (PayPal и ещё одна местная) т.е. наврядли проблема в модуле интеграции с платёжкой т.к. модули разные.
Удалось выяснить что в проблемной ситуации при возврате пользователя из платёжки на сайт у него пропадает сессия, т.е. массив $_SESSION пустой. Посоветуйте как найти и устранить проблему.
Спасибо, но интеграционные модули для платёжных систем уже сделаны не мной, раньше они работали через сессии. Проверка через POST тоже проводится, и если номер из POST не совпадает с номером в сессии, состояние заказа не меняется. Собственно это у меня и происходит. Возможно это не правильно в архитектурном плане, но хотелось бы найти причину возникшей неполадки.
Что написал? Оплата не сделана через сесии. Данные в платёжную систему и из неё передаются через POST.
Проблема в том что когда пользователь после оплаты возвращается на сайт у него пропадает сессия, т.е. он отлогинивается.
if (!isset($_SESSION['cart_order']) || intval($_SESSION['cart_order']) != $_POST['Order']) {
drupal_set_message(t('Thank you for your order! Tranzila will notify us once your payment has been processed.'));
drupal_goto('cart');
}
if ($_POST['Response'] == '000') {
$_SESSION['uc_checkout'][$_SESSION['cart_order']]['do_complete'] = TRUE;
drupal_goto('cart/checkout/complete');
drupal_set_message(t('Thank you for your purchase'));
}
При потере сессии первая проверка не проходит. Запись в лог показывает что к моменту этой проверки массив SESSION пуст.
Не совсем понимаю. Человек возвращается с сайта платёжной системы в мой сайт, при этом у него в куке хранится идентификатор сессии моего сайта. Сессия ПС, если она есть, действует на сайте ПС. Сессия моего сайта действует в моём сайте. Именно так и происходит когда я провожу тестовый платёж и контролирую это в консоли браузера - я остаюсь в своей сесии. Почему у НЕКОТОРЫХ моих пользователей это не так?
Вообще я никогда не сталкивался с тем что при вызове через POST сессия переписывается. Где можно об этом почитать?
СРАЗУ! сохраняем статус в базу данных БЕЗ ВСЯКИХ СЕССИЙ!
А уже после возврата юзером на страницу сайта - доставать статус из БД при необходимости.
Если статус меняет не ответчик ПС, а именно браузер (при редиректе), то сразу после проверки if ($_POST['Response'] == '000') { вставить ниже: session_start(); для дополнительной ПЕРЕИНИЦИАЛИЗАЦИИ сессии юзера по его кукам.