Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Бот робокассы и завершение сессии
Форумы портала PHP.SU » » CMS и фреймворки » Бот робокассы и завершение сессии

Страниц (1): [1]
 

1. ginec - 05 Мая, 2011 - 09:19:41 - перейти к сообщению
Здравствуйте! Я принимаю платежи с помощью Робокассы. сейчас тестирую свой магазин с помощью их тестового сервера. CMS Joomla 1.5( не ругайтесь ). Компонент писал сам.
Моя проблема заключается в сессиях. После успешной оплаты, необходимо скинуть все товары, которые есть в корзине, т.е. завершить сессию. Когда робот Робокассы переходит по Result URL, в БД все заносится успешно, но сессия не скидывается. Более того, при переходе по Success URL или Fail URL, я оказываюсь разлогиненным на своем сайте, но при переходе на другую страницу сайта оказываюсь залогиненым. Чем это объясняется и можно ли этого избежать? Еще раз подчеркну мой вопрос: как сделать так, чтобы после запроса робота Робокассы Result URL и перехода на Success URL и сессия закрывалась? Заранее благодарен!

--
2. Viper - 05 Мая, 2011 - 09:25:20 - перейти к сообщению
3. ginec - 05 Мая, 2011 - 09:33:49 - перейти к сообщению
я ставил так
PHP:
скопировать код в буфер обмена
  1. $session = JFactory::getSession();
  2. $session->set('places', null); //вообще в этой сессии хранится массив.

Но так не завершается.
Цитата:
Более того, при переходе по Success URL или Fail URL, я оказываюсь разлогиненным на своем сайте
4. Viper - 05 Мая, 2011 - 11:11:01 - перейти к сообщению
ginec пишет:
я ставил так
ну это вы установили данные в сессии.

аналог unset это метод clear

$session = JFactory::getSession(); не вернет вам текущую сессию, т.к. нужно ещё передать массив с параметрами.

не пробовали $session = &JSession::getInstance('default', array()); ?
5. ginec - 05 Мая, 2011 - 12:59:45 - перейти к сообщению
Спсибо.
Сделал так
PHP:
скопировать код в буфер обмена
  1. JSession::clear( 'places', 'default' );

но корзина не опустела((
Поясните. если не сложно, в чем отличие
PHP:
скопировать код в буфер обмена
  1. $session = &JSession::getInstance('default', array());

от
PHP:
скопировать код в буфер обмена
  1.  $session = JFactory::getSession();



И какие параметры есть у этого метода. гуглил, но ничего толкового не нашел.

И все же вопрос пока не решен
(Добавление)
При переходе с робокассы, корзина становится пустой, но если перехожу на другую страницу, то и корзина не пуста
6. Viper - 05 Мая, 2011 - 14:51:12 - перейти к сообщению
ginec через getInstance можно обратиться не только к сессии по умолчанию. Если к примеру их несколько.
ginec пишет:
И какие параметры есть у этого метода
все параметры обоих подходов одинаковы и находятся в описании к JSession.
ginec сделайте дебаг сессии. print_r до работы с кассой, и после. Посмотрите что у вас передается от страницы к странице.

PS!
ginec пишет:
Более того, при переходе по Success URL или Fail URL, я оказываюсь разлогиненным на своем сайте
есть подозрение на баг в 1,5 ветке. Встречал мимолетное упоминание об этом на joomla dev. В 1.6 по заверениям уже исправлено.
7. ginec - 05 Мая, 2011 - 16:28:23 - перейти к сообщению
может надо token передавать? уже голова ломается...
(Добавление)
Viper, спасибо за помощь! в контроллере у меня за проверку result url отвечал task paymentChecker, после переименования в payment все заработало. видать из-за camelCase
8. Zuldek - 05 Мая, 2011 - 17:40:42 - перейти к сообщению
А что будет если:

1. Сессия умрёт до того как придёт запрос на reselt/success url, например через 9-10 часов (оплатил заказ на следующее утро через терминал)?
2. Если запрос на Reselt url вообще не придёт так и останется полная корзина пока сессия не умрёт?

Не очень понял зачем держать товар в корзине после инициации оплата заказа. В скриптах которые писал, подсмотрев на других интернет-магазинах, после оплаты, или инициации оплаты заказа товары из корзины удалялись и отображались в журнале заказов профиля клиента где и можно было следить за их статусом. Оттуда же они могли быт ьперенесены в корзину (если не проплатил и захотел-таки оплатить, либо если захотел сделать повторный заказ тех же товаров). Каждые 10.5 часов заказанный неоплаченный товар разблокировался для заказа другими клиентами.
9. ginec - 05 Мая, 2011 - 17:58:44 - перейти к сообщению
Zuldek пишет:
Не очень понял зачем держать товар в корзине после инициации оплата заказа.

Размышляете Вы интересно. И даже заставили меня засомневаться в моих действиях. Т.е. вы предлагаете избежать сессий и заносить в бд товар и idUser?
10. ginec - 06 Мая, 2011 - 13:05:44 - перейти к сообщению
Не знаю, как заказчик отнесется к такой идее. Там ситуация сложная. Если обходиться без сессий, то получается надо чтобы юзер был залогинен.

 

Powered by ExBB FM 1.0 RC1