У меня проблема с тем, как я пытаюсь удалить некоторые переменные сеанса при работе с paypal и ipn.specifically, я хочу, чтобы кто-то вошел в систему (или нет) в моем интернет-магазине, проехал через мою корзину, перенаправлялся к paypal для оплаты, а затем перенаправить на мой сайт.
я использую paypal ipn, чтобы получить Paypal, чтобы уведомить меня, когда платеж будет завершен, и я могу направить пользователя обратно на мой сайт, где сеанс может быть запущен снова, но я хочу, чтобы убрать корзину (но не весь сеанс в случае их входа в систему), как только платеж будет завершен. это будет охватывать мои базы, если пользователь не вернется на страницу, заполненную оплатой на моем сайте, но вернется на сайт на другой странице.
проблема в том, что, хотя я получаю один и тот же идентификатор сеанса как на последней странице информации о доставке на моем сайте, прежде чем перейти на paypal, так и на целевой странице на моем сайте из PayPal, когда платеж будет завершен, я не могу получить доступ к этому сеансу в своем ipn скрипт, который запускается на моем сайте в ответ на paypal. Я запускаю session_start () на каждой из этих трех страниц, но когда я отправляю сообщение по электронной почте или отправляю сообщение на странице метода доставки и полной целевой странице оплаты, я получаю один и тот же идентификатор сеанса. когда я пишу сам результат идентификатора сеанса в моем скрипте ipn, я ничего не получаю.
я мог убить телегу, прежде чем идти на paypal, но что, если они захотят вернуться и изменить ситуацию? я мог убить корзину на целевой странице, но что, если они каким-то образом попадут на другую страницу? я действительно хотел бы уничтожить тележку, но не всю сессию, когда я получу подтверждение оплаты, но я не уверен, как это сделать. Я пробовал это на моей странице ipn:
session_start(); $a = session_id(); mail("webmaster@mysite.com", "ipn session id 0", $a, "From: webmaster@mysite.com"); //results in blank email, unlike in other locations on actual displayed pages // Unset all of the session variables. $_SESSION = array(); // Delete the session cookie to kill the session if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // Finally, destroy the session. session_destroy(); unset($_SESSION['cart']); unset($_SESSION['product_id_array']); unset($_SESSION['pp_checkout_btn']); unset($_SESSION['state']); unset($_SESSION['total']); unset($_SESSION['shipping']); unset($_SESSION['grand_total']);
но когда я вернусь на страницу просмотра, она все еще там. Любые идеи очень приветствуются. более конкретный код, который поможет, сообщите мне, и я опубликую его.
Вызов IPN Paypal производится Paypal и только сервер-сервер. Вы также не знаете, когда придет вызов IPN. Обычно они происходят через несколько секунд, но они могут прийти гораздо позже. Если вызов IPN завершается неудачно, они будут снова повторять попытку в течение некоторого времени. Вы не можете сделать ничего, связанное с сеансом пользователей в IPN. У каждого пользователя есть своя сессия, и вы не можете редактировать кого-либо еще. В этой ситуации у вашего пользователя есть сеанс, и Paypal (вызов IPN) получает свой собственный сеанс.
После успешной оплаты вам придется очистить переменные сеанса при возврате на ваш сайт. Это не безупречно – есть возможности, что тележка по-прежнему не будет очищена, но это почти единственный способ сделать это.