Основная проблема, которую я вижу, заключается в том, что вы используете переменные сеанса. Обратите внимание, что запрос, который попадает в ваш PHP-код, будет поступать непосредственно с сервера PayPal и не имеет ничего для текущего зарегистрированного пользователя.
Вам необходимо передать информацию о пользователе в PayPal, чтобы PayPal мог передать ее обратно на ваш сервер в рамках запроса IPN. Другая вещь, которую вы можете сделать, это проверить некоторые значения, приходящие в IPN, например, адрес электронной почты плательщика (payer_email
) или parent_txn_id
, или payer_id
.
Я не уверен насчет подписок, но IPNs для возврата и отмены будут включать parent_txn_id
, который предоставляет txn_id первоначальной покупки, так что вы можете использовать его для поиска учетной записи пользователя.
Что вам нужно сделать, так это убедиться, что при совершении покупки вы сохраняете всю информацию из IPN и связываете ее с помощью txn_id или аналогично учетной записи пользователя. Когда происходит отмена, используйте parent_txn_id
или любое другое значение, которое вы используете, чтобы найти учетную запись в базе данных, а затем примените изменения к учетной записи пользователя.
Я вижу ряд других проблем с кодом выше.
$query = "SELECT * FROM users WHERE username= '$_SESSION[username]' AND password = '$_SESSION[password]'";
Вам необходимо использовать mysql_real_escape_string для всех переменных, которые вы добавляете в запрос. Вы должны сделать это:
$query = "SELECT * FROM users WHERE username='".mysql_real_escape_string($username)."' AND password = '.mysql_real_escape_string($password).'";
Во-вторых, ссылки на массивы должны использовать кавычки вокруг имени ключа:
$_SESSION[password] => $_SESSION['password']
В-третьих, вам, вероятно, следует искать пользователя в базе данных по его идентификатору строки в таблице пользователей (у вас есть первичный ключ «id», установленный как автоинкремент, верно?) Вместо его имени пользователя и пароля. После аутентификации пользователя вам не следует хранить его пароль в переменной сеанса.