私は Micha の PayPal IPN スクリプトを使用していますが、ほとんどの場合うまく機能しました: https://github.com/Quixotix/PHP-PayPal-IPN
Web サイトで [今すぐ支払う] をクリックすると、正しい情報でペイパルにリダイレクトされ、支払いを行うことができますが、戻ってきても何も起こりません。つまり、ユーザーがアップグレードされません。IPN の外部でコードのスクリプトをテストしましたが、完璧に動作するので、IPN スクリプトがセッションを失っているように見えますか?
ここに私のボタンコードがあります:
<form name="_xclick" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="EMAIL_TO">
<input type="hidden" name="currency_code" value="GBP">
<input type="hidden" name="item_name" value="Text Light">
<input type="hidden" name="amount" value="0.01">
<input type="hidden" name="return" value="http://domain.co.uk/editors">
<input type="hidden" name="notify_url" value="http://domain.co.uk/account/upgrade">
<input type="submit" value="Pay now" class="btn btn-preview" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
</form>
したがって、通知 URL (IPN コード) は /account/upgrade です。私が知る限り、これはアップグレード タスクを実行する場所ですか? だからここに私の(取り除かれた)コードがあります
if ($verified) {
$errmsg = '';
// some error checking
if (!empty($errmsg)) {
// manually investigate errors from the fraud checking
} else {
// upgrade user
$package = serialize($_SESSION['package']);
$this->db->update('users',array('id' => $_SESSION['user']['id']),array('payment_plan' => $package));
}
} else {
// not verified, investigate problems
}
上記のように、'// upgrade user' の下のコードは外部では問題なく動作しますが、paypal から戻ると、明らかにセッションを保持していません。エラーをスローしているのではなく、何もしていません。
どこで間違ったのですか?セッション情報が PayPal から確実に返されるようにする方法を教えてください。
ありがとう