ホームページ  >  記事  >  バックエンド開発  >  セッションの失敗、非常に奇妙な失敗の解決策

セッションの失敗、非常に奇妙な失敗の解決策

WBOY
WBOYオリジナル
2016-06-13 13:33:04968ブラウズ

セッションが失敗しました。非常に奇妙な失敗です
この 2 日間 Paypal を書き続けて、ipn.php をほぼ完成させようとしていますが、非常に混乱する問題に遭遇しました。
ipn.php ではセッションの一部のみが有効です。コードを参照してください。

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?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) {
// IPN を処理しようとしたときに致命的なエラーが発生しました。
exit(0);
}

------解決策------------------
心配しないでください。自分でキャッシュしてください
まずは解決しましょう
try {
$mysession = $_SESSION;
$verified = $listener->processIpn();
$_SESSION = $my_session;
} catch ( Exception $e) {
// IPN の処理中に致命的なエラーが発生しました。
exit(0);
}
------解決策------------------
ipn.php ファイルは正常に支払われましたか?ページを確認してください。支払いステータスを更新するための SQL ステートメントを拝見しました。
私の推測が正しい場合、理解する必要があるのは、顧客の支払いプロセスはブラウザーを介して行われるため、Cookie ヘッダーは続行できますが、PayPal が支払い結果の通知を要求するプロセスは 1 日に行われるということです。このページは、当社の PHP で一般的に使用されるカールなどの palpay サーバーによって完成されます。したがって、現在の Cookie を PayPal に明示的に渡さず、PayPal のリクエストのヘッダーにこの Cookie が含まれている場合、どのようにしてセッションを読み取ることができるでしょうか。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。