日期:2014-05-17  浏览次数:20460 次

session失效,很奇怪的失效
这两天一直在写paypal, 现在就快把ipn.php整完了,但遇到一个问题让我很费解啊!
session在ipn.php里面只有一部分有效,看代码
PHP code

<?php
//ipn.php全部代码
session_start();
include('ipnlistener.php');
include_once 'lib/functions.php';
ini_set('display_errors', 'Off');
$db = new Connection();
$connection = $db->connect();

$listener = new IpnListener();
$listener->use_sandbox = true;

$order_time=$_SESSION['order_time_org'];
$username=$_SESSION['user'];
echo "$order_time, $username";

//到这里位置以上,SESSION是可以用的 上面输出两个都能显示出来
//下面就显示不出来了!这是为什么?

try {
    $verified = $listener->processIpn();
} catch (Exception $e) {
    // fatal error trying to process IPN.
    exit(0);
}

if ($verified) 
{
    // IPN response was "VERIFIED"
    //send email form
    $invoice_id=$_POST['invoice'];
    $payment_status = $_POST['payment_status'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];
    //$order_time = $_POST['custom'];
    //$whimwin_user=$_SESSION['user'];
        //这里的$_SESSION['user']显示不出来啊!
    //if($payment_status=="Completed")
    //{    
        $query="UPDATE CART SET payment_status='paid' WHERE username='$username' AND order_time='$order_time' AND invoice_id='$invoice_id'";
        $result=queryMysql($query);
        if($result)
        {
            $to="xxxx@gmail.com";//payer_email
            //subject
            $subject="Whim Win paid successful!";
            //from
            $header="from: test <whimwin@gmail.com>";
            //message body
            $message="Dear Member, \n\n";
            $message.="this is you invoice id $invoice_id \n";
            $message.="$payment_status, $order_time, $payer_email, $receiver_email, $username";
            //send email
            $sendmail=mail($to,$subject,$message,$header);

        }
    //}

} else {
    // IPN response was "INVALID"
}
$db->close();
?>



------解决方案--------------------
先测试一下
try {
print_r($_SESSION);
$verified = $listener->processIpn();
print_r($_SESSION);
} catch (Exception $e) {
// fatal error trying to process IPN.
exit(0);
}

------解决方案--------------------
不要去管他,自己缓存一下
先调通了再说
try {
$mysession = $_SESSION;
$verified = $listener->processIpn();
$_SESSION = $my_session;
} catch (Exception $e) {
// fatal error trying to process IPN.
exit(0);
}
------解决方案--------------------
你这个ipn.php文件是支付成功的verify页面吧?我有看到你update支付状态的sql语句。
如果我猜的没错,那么你要搞清楚的一点是,客户支付的过程是走浏览器,所以cookie头可以续传,但是paypal请求你这个页面通告你支付结果这个流程,是通过palpay服务端完成的,比如我们php常用的curl。所以如果你不是显式的传给paypal当前的cookies,然后paypal请求的header头里带上这个cookies,怎么可能读到session呢。