0

Paypal と IPN を扱うときにいくつかのセッション変数を削除しようとしている方法に問題があります。具体的には、オンライン小売店で誰かにログインしてもらいたい (またはログインせずに)、カートを通過して、リダイレクトされるようにしたいです。支払いのためにペイパルに送ってから、私のサイトにリダイレクトされます。

私はペイパルipnを使用して、支払いが完了したときにペイパルに通知してもらい、セッションを再開できるサイトにユーザーを戻すことができますが、カートの設定を解除できるようにしたいです(ただし、カート全体ではありませんログインしている場合はセッション) 支払いが完了するとすぐに。これは、ユーザーが私のサイトの支払い完了ページに戻らず、別のページでサイトに戻った場合に備えて、私の基盤をカバーすることです.

問題は、ペイパルに行く前のサイトの最後の配送情報ページと、支払いが完了したときにペイパルからサイトに戻ったランディングページの両方で同じセッションIDを取得していますが、ipnでこのセッションにアクセスできないことですPaypal に応答して私のサイトで実行されるスクリプト。これら 3 つのページのそれぞれで 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 に答える