Я внедряю PayPal IPN и PDT. После некоторой головной боли и времени в песочнице IPN работает хорошо, и PDT возвращает правильные данные $_GET. Реализация выглядит следующим образом:
- Передать идентификатор пользователя в форме в PayPal
- Пользователь покупает продукт и запускает IPN, который обновляет базу данных для данного идентификатора пользователя.
- PDT возвращает идентификатор транзакции, когда пользователь возвращается на сайт
- На странице возврата написано «пожалуйста, подождите» и повторите Ajax-проверку статуса транзакции.
- Пользователь перенаправляется на страницу успеха/неудачи
Все работает хорошо, ЗА ИСКЛЮЧЕНИЕМ того, что при использовании готового PHP-кода PayPal для PDT для выполнения возврата POST страница зависает. Пользователь никогда не возвращается на мой сайт. Я не получаю статус сбоя, просто ничего. Самое смешное, что как только возникает неизвестная ошибка, мой тестовый домен на короткое время перестает отвечать на запросы.
Код (PHP): https://www.paypal.com/us/cgi-bin/webscr?cmd=p/xcl/rec/pdt-code-outside
Если я прокомментирую POST обратно, все будет работать нормально. Я могу определить проблему до того, как код войдет в цикл while{}. К сожалению, у меня недостаточно опыта, чтобы написать замену кода PayPal с нуля, поэтому буду очень признателен за любые идеи о том, что может быть не так.
POST возвращается на ssl://www.sandbox.paypal.com, и я использую код кнопки и токен авторизации, которые были созданы с помощью тестовой учетной записи песочницы.
Заранее спасибо.
ОБНОВЛЕНИЕ:
Я сузил проблему до этой строки: $line = fgets($fp, 1024);
Он просто зависает, и я не уверен, почему.