0

我在处理 paypal 和 ipn 时尝试删除一些会话变量的方式有问题。具体来说,我希望有人在我的在线零售店登录(或不登录),通过我的购物车,获得重定向支付宝付款,然后被重定向到我的网站。

我一直在使用 paypal ipn 让 paypal 在付款完成时通知我,我可以将用户引导回我的站点,在那里可以再次开始会话,但我希望能够取消设置购物车(但不是整个会话,以防他们登录)付款完成后。这将覆盖我的基础,以防用户没有回到我网站上的付款完成页面,而是在不同页面上返回网站。

问题是,虽然我在去贝宝之前在我网站上的最后一个运输信息页面上获得了相同的会话 ID,并且在付款完成后从贝宝回到我的网站上的登陆页面我无法在我的 ipn 中访问这个会话在我的网站上运行以响应贝宝的脚本。我在这三个页面中的每一个上都运行 session_start() 但是当我在运输方式页面和付款完成登录页面上发送电子邮件或发布时,我得到相同的会话 ID。当我通过电子邮件向自己发送 ipn 脚本中会话 ID 的结果时,我什么也得不到。

我可以在去贝宝之前杀掉购物车,但如果他们想回去改变东西怎么办?我可以杀死着陆页上的购物车,但如果他们以某种方式进入不同的页面怎么办?当我收到付款确认时,我真的很想销毁购物车,但不是整个会话,但我不确定如何。我在我的 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']);

但是当我回到查看购物车页面时,它仍然存在。任何想法将不胜感激。任何更具体的代码会有所帮助,让我知道,我会发布它。

4

1 回答 1

1

Paypal IPN 呼叫由 Paypal 进行,并且仅限于服务器到服务器。您也不知道该 IPN 呼叫何时到来。通常它们会在几秒钟内发生,但它们可能会晚得多。如果 IPN 呼叫失败,他们将重试一段时间。您不能做任何与 IPN 中的用户会话相关的事情。每个用户都有自己的会话,您不能编辑其他任何人的会话。在这种情况下,您的用户有一个会话,而 Paypal(IPN 呼叫)获得它自己的会话。

付款成功后,您必须在返回站点时清除会话变量。这不是万无一失的——有可能仍然无法清除购物车,但这几乎是唯一的方法。

于 2011-05-19T05:59:05.113 回答