API для PDT и IPN похожи. Основное отличие - когда вы получаете уведомление. По этой причине я бы рекомендовал реализовать оба.
- С PDT вы получаете уведомление мгновенно и можете выполнить любую дополнительную обработку и показать пользователю страницу подтверждения.
- С IPN вы гарантированно получите уведомление о том, что платеж был получен, даже если компьютер пользователя взорвется, прежде чем он сможет отправить вам PDT.
Реализуйте оба варианта и получите лучшее из обоих миров. Но если вы делаете только один, IPN - самый надежный.
Одна загвоздка: если вы реализуете оба варианта, есть вероятность, что ваши платежи будут обработаны дважды. Позаботьтесь о том, чтобы этого не произошло. Приложение, которое я написал, обрабатывает PDT и IPN почти одинаково (внутренняя часть одинакова), и этот код получает блокировку для каждого веб-пользователя в базе данных, поэтому, если один и тот же пользователь пытается отправить один и тот же платеж несколько раз, он можно обработать только один раз. После обработки результат этого процесса повторно используется для любых последующих попыток его обработки.
Изменить
Еще одна вещь: IPN несет больше информации, чем PDT. Существует множество различных сообщений, которые вы можете получать от IPN, таких как уведомление о возвратных платежах и т. Д., И поэтому вам действительно следует реализовать его.
Система PDT PayPal отправляет подтверждения заказов торговым сайтам, которые используют PayPal Payments Standard, и позволяет им аутентифицировать эту информацию. Такие сайты могут затем отображать эти данные локально на странице «подтверждения заказа».
Когда использовать PDT?
IPN предоставляет те же возможности, которые описаны выше. Итак, когда лучше выбрать PDT вместо IPN?
С PDT ваш сайт получает уведомление сразу же, когда покупатель завершает платеж. Однако с IPN существует существенная задержка между моментом, когда клиент завершает платеж, и моментом, когда ваш сайт получает уведомление об этом событии.
Итак, используйте PDT, если на вашем сайте есть функция, требующая немедленного уведомления об оплате.
Например, рассмотрим магазин цифровой музыки. Благодаря PDT этот магазин может позволить покупателям сразу же загружать свои покупки, поскольку PDT немедленно отправляет подтверждения заказа. С IPN такое немедленное выполнение заказа невозможно.
Преимущества IPN
У PDT есть серьезная слабость: он отправляет подтверждения заказа один и только один раз. В результате, когда PDT отправляет подтверждение, ваш сайт должен работать; в противном случае он никогда не получит сообщение.
Напротив, с IPN доставка подтверждений заказа практически гарантирована, поскольку IPN повторно отправляет подтверждение до тех пор, пока ваш сайт не подтвердит получение. По этой причине PayPal рекомендует использовать IPN, а не PDT.
Еще одним преимуществом IPN является то, что он отправляет много типов уведомлений, в то время как PDT отправляет только подтверждения заказа. Таким образом, используя IPN, ваш сайт может получать, например, уведомления о возвратных платежах, а также подтверждения заказов. Примечание. Если ваш сайт должен получать уведомления о платежах немедленно, вы можете реализовать как IPN, так и PDT. Однако, если вы это сделаете, ваш сайт будет получать два подтверждения заказа для каждой продажи. В результате вы должны быть осторожны, чтобы принять меры (например, отправить продукт) только с одной копией данного подтверждающего сообщения.
Документация здесь