Как и многие из нас, я внедряю решение PayPal.Читая документацию для разработчиков, я понимаю, что IPN - это протокол асинхронных сообщений, который запускает выполнение платежей.
PayPal имеет официальный способ реагирования на эти сообщения и проверки происхождения сообщений IPN на вашемСлушатель IPN.Каждое сообщение IPN, полученное слушателем от PayPal, содержит заголовок запроса HTTPS User-Agent со значением IPN PayPal (https://www.paypal.com/ipn) . Они подчеркивают, что не использует этот заголовок дляубедитесь, что IPN действительно пришел от PayPal и не был подделан.Скорее, чтобы проверить эти вещи, вы должны использовать протокол аутентификации IPN, описанный ниже, который состоит из четырех шагов:
- PayPal HTTPS POST отправляет сообщение IPN вашему слушателю, который уведомляет его о событии.
- Ваш слушатель возвращает пустой ответ HTTP 200 в PayPal.
- Ваш слушатель HTTPS отправляет полное, неизмененное сообщение обратно в PayPal;сообщение должно содержать те же поля (в том же порядке), что и исходное сообщение, и должно быть закодировано так же, как и исходное сообщение.
- PayPal отправляет обратно одно слово - либо ПРОВЕРЕНО (если сообщение соответствуетOriginal) или INVALID (если сообщение не соответствует оригиналу).
Шаги 2, 3, 4 и 5 на приведенной ниже схеме показывают этот протокол.
Как вы можете видеть выше, они рекомендуют что-то, что отвечает одним [ПРОВЕРЕНО] из сообщения [НЕВЕРНЫЙ], чтобы предотвратить мошенничество.
Я думаю, чтоЛюбой имитатор IPN может отправить слушателю сообщение о состоянии «ПРОВЕРЕНО», так что это не имеет смысла.Поэтому мои вопросы:
- Это решение действительно безопасно?
- если нет, то какой подход действительно может предотвратить мошенничество и обеспечить выполнение платежа?
Интересно, если бы мы могли обменять секретный ключ, он был бы более надежным.
Все мысли приветствуются.Спасибо.