Paypal notify_url и return_url. Получение переменных без IPN с использованием PHP

Я пытаюсь настроить простой способ оплаты для PayPal, но у меня есть некоторые проблемы / путаницы с возвратом и уведомлением URLS. Я довольно новичок в php и уже сделал это в asp, но теперь я потерялся.

Итак, моя основная форма оплаты:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="PayPalForm" name="PayPalForm" target="_top"> <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="email@hotmail.com"> <input type="hidden" name="amount" value="0.01"> <input type="hidden" name="item_name" value="Composite Door"> <input type="hidden" name="item_number" value="<?php echo $orderID ?>"> <input type="hidden" name="currency_code" value="GBP"> <input type="hidden" name="cancel_return" value="http://www.mydomain.co.uk/paypal-notcompleted.php"> <input type="hidden" name="return" value="http://www.mydomain.co.uk/paypal-completed.php"> <input type="hidden" name="notify_url" value="http://www.mydomain.co.uk/paypal-completed.php"> </form> <script> document.PayPalForm.submit(); </script> 

Поскольку вы можете видеть сообщения формы в paypal, а затем возвращаться в зависимости от результата, если он отменен / отменен, он переходит к paypal-notcompleted.php.

Если это будет успешным, он будет отправлен на paypal-complet.php. И вот где я не могу понять, я не настроил IPN, все, что я хочу сделать, это захватить некоторые переменные в сообщениях paypal, чтобы запустить простой запрос вставки и отобразить некоторые детали в сообщении с подтверждением заказчику.

Могу ли я иметь notify_url и return_url на одной странице?

Почему paypal не публикует все ожидаемые (см. Здесь: Уведомить URL-адрес Paypal ) обратно на страницу?

Я понимаю, что есть что-то делать с XML и т. Д., Но я просто понял, что могу $ _GET переменные, которые отправил PayPal обратно. Кто-нибудь сделал это так, могут ли они сказать мне, где я ошибаюсь?

Чтобы вернуть данные обратно к URL-адресу возврата, вам необходимо использовать PDT . Он очень похож на IPN, за исключением того, что он предназначен для использования с вашим URL-адресом возврата, в то время как IPN предназначен для использования с сторонним сценарием прослушивателя IPN на вашем сервере.

PDT отлично подходит для простого отображения транзакции пользователю на странице URL-адреса возврата, но не рекомендуется выполнять какую-либо обработку после оплаты с помощью PDT (т. Е. Обновление базы данных, отправка почтовых рассылок и т. Д.), Поскольку нет гарантии, что пользователь вернется на эту страницу, даже если автозапуск включен в вашей учетной записи PayPal.

IPN будет запускаться каждый раз, когда происходит транзакция, независимо от того, вернется ли пользователь на ваш сайт после завершения оплаты.

URL-адрес уведомления используется только для IPN, и он отменяет любые настройки, которые у вас есть в вашем профиле PayPal для IPN. PDT необходимо настроить в профиле учетной записи PayPal, чтобы получить данные, возвращаемые на ваш URL-адрес возврата.

Вы захотите использовать разные URL для возврата и уведомления, иначе этот же код будет работать дважды: один раз, когда пользователь вернется на ваш сайт и снова из POST PayPal IPN.

Передача платежных данных (PDT)

URL-адреса return и cancel_return являются одноразовыми платежами ( PDT ), в первую очередь, поэтому пользователь завершает транзакцию на вашем сайте . Это только передача информации, чтобы разумно помочь вашему сайту выполнить эту задачу. Нет гарантии, что покупатель не выйдет перед возвратом, поэтому вы не можете полагаться на возможность выполнять обработку после транзакции с использованием этих данных.

Мгновенное уведомление об оплате (IPN)

notify_url используется процессом мгновенного уведомления о платежах ( IPN ) и notify_url с каждым изменением статуса транзакции. Он предназначен для полной записи всех действий, предпринятых в течение жизненного цикла транзакции, на которых вы можете положиться на процесс бэкэнд-процесса, например, учет, выполнение заказа или аннулирование. Процесс IPN принимает меры для обеспечения целостности процесса.

Их цели различны, и, следовательно, информация и безопасность различны. За плюсы и минусы .

Сообщения IPN могут сильно задерживаться, поэтому используйте все три переменные

Обратите внимание, что, хотя большинство сообщений IPN отправляются в течение нескольких секунд после завершения транзакции PayPal, я испытал задержки до нескольких часов, поэтому они надежны, но не обязательно своевременны.

Я бы предложил использовать все return , return_cancel и notify_url , так как первые два будут немедленно возвращены, так что вы сможете мгновенно получить обратную связь с пользователем и обновить данные бэкэнда / инициировать процессы выполнения, но использовать последнюю в качестве резервной копии, если пользователь завершает работу PayPal перед возвратом. Укажите покупателям, чтобы они вернулись на ваш сайт, чтобы обеспечить своевременную обработку их заказа.

Просто нужно управлять статусом заказа, чтобы IPN не вызывал выполнение, если PDT уже сделал это, что в основном является тем, что вам нужно сделать, чтобы повторные Completed IPN-сообщения не выполняли повторное выполнение после первого.

Notify_url продолжает использоваться для последующих сообщений для одной и той же транзакции

Сообщения IPN для одной и той же транзакции продолжают переходить на тот же адрес notify_url . Я просмотрел нашу историю IPN, и сообщение о notify_url IPN отправилось в исходное notify_url .

Это продолжается, даже если вы измените настройки IPN, согласно https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNSetup/ :

Сообщение IPN всегда отправляется на ваш URL-адрес уведомления, если вы не отключили предпочтение получать сообщения IPN. Даже если вы не включили получение сообщений IPN в своем профиле или вы сбросили свои предпочтения, отключив IPN-сообщения, PayPal по-прежнему отправляет IPN-сообщения на указанный вами URL-адрес уведомления для определенного платежа. Сообщения IPN, не отправленные, поскольку вы отключили предпочтение в своем профиле, будут отображаться в истории IPN при включении приема IPN. После того, как они появятся в истории, вы можете выбрать, отправлять ли их повторно.

Я не уверен, будут ли связанные транзакции, такие как споры или последующие платежи по подписке, по-прежнему использовать оригинальный notify_url . Возможно, кто-то, кто действительно знает, может дать ответ.

ваш url-url-url и return оба являются разными. ваш обратный URL-адрес направляет вашего клиента после успешной оплаты с некоторой информацией о возврате. кстати, уведомить url о том, чтобы получить полную информацию о транзакциях покупки ваших клиентов и к которым не может получить доступ ваш клиент, и это для вашей базы данных или целей хранения.