ОБНОВЛЕНИЕ 1:
Согласно этому руководству по использованию мгновенных уведомлений PayPal с помощью PHP , PayPal не может получить доступ к локально размещенным веб-сайтам, если не открыты определенные порты маршрутизатора. Это потому, что сайт относится к IPN
или это верно для всех API-интерфейсов PayPal?
ОРИГИНАЛЬНЫЙ ВОПРОС:
На моем ноутбуке у меня есть настройка среды LAMP
, когда я использую http://localhost
для создания веб-сайта перед тем, как начать жить.
Для нового проекта мне нужно использовать API PayPal. Смогу ли я использовать localhost для тестирования API-интерфейсов PayPal, если я подключу свой ноутбук к Интернету? Или мне нужно будет загрузить мой сайт на хост LAMP в другом месте?
Вы, наверное, думаете, какой глупый вопрос, просто попробуйте, чтобы увидеть, работает ли это. Я пробовал, и он не работает, и я хотел исключить этот вопрос, прежде чем переходить к следующему шагу.
Он должен работать. В прошлом году я сделал интеграцию платежей с PayPal, и он работал на localhost без проблем.
Вы используете песочницу paypal для разработки? https://developer.paypal.com/
Если вы хотите отладить свой IPN-код, вам нужно сделать свой сервер общедоступным. Это значит, что PayPal может асинхронно отправлять обратно на ваш сервер позднее после отправки вашего запроса. Обычно это довольно быстро, я думаю (в течение 15 секунд), но это может быть больше.
Один простой способ, который я нашел, чтобы сделать сервер разработки доступным, – использовать ngrok или forwardhq.com . Это позволяет вам продолжать развиваться в вашей среде IDE, как обычно, запуская свой код в режиме отладки. Когда PayPal отправляется обратно в конечную точку, вы можете отлаживать его прямо там, в вашей среде IDE. Эти сервисы завершают это для вас, поэтому это очень легко обойтись без технических ноу-хау.
По моему мнению, это делается с использованием «обратного SSH-туннеля», который позволяет публиковать ваш сайт, проксируя его через уже открытый сервер. Обратите внимание, что прежде чем вы это сделаете, вы должны учитывать, что не только PayPal может попасть на ваш сайт, как только он станет общедоступным, но любой может, поэтому, пожалуйста, учтите это в первую очередь.
Кроме того, если у вас есть собственный публичный домен и не против играть в терминале с SSH, вы можете, возможно, сделать что-то вроде этого сценария оболочки ( скопированного из этой сути )
# Usage: show <local-port> <subdomain> function show() { DOMAIN=".yourdomain.com" REMOTE="$2$DOMAIN" ssh -tR 1080:127.0.0.1:$1 vps "sudo ssh -Nl \$USER -L $REMOTE:80:127.0.0.1:1080 localhost" }
Чтобы заставить это работать, как описано выше, вам нужно поместить следующее в ваш файл ~ / .ssh / config:
Host vps HostName <server address> User <server username>
Если вы не хотите (или не можете) сделать это, то будет работать следующее:
SERVERUSER="<server username>" ssh -l $SERVERUSER -tR 1080:127.0.0.1:$1 <server address> "sudo ssh -Nl \$SERVERUSER -L $REMOTE:80:127.0.0.1:1080 localhost"
Одно простое решение описано на официальной странице разработчиков PayPal:
developer.paypal.com – Локальное тестирование IPN
Трюк состоит в написании небольшого HTML-файла с этим контентом:
<form target="_new" method="post" action="https://www.YourDomain.com/Path/YourIPNHandler.php"> <!-- start example variables: --> <input type="hidden" name="SomePayPalVar" value="SomeValue1"/> <input type="hidden" name="SomeOtherPPVar" value="SomeValue2"/> <!-- /end example variables --> <input type="submit"/> </form>
Если http: // localhost не проверяет использование http://127.0.0.1
Он должен работать без проблем, однако он может стать разборчивым, если вы отправляете «недопустимые URL-адреса» для URL-адресов возврата и URL-адресов сообщений IPN. Смысл, отправка в http: //localhost/cancelpaypal.php как cancelURL может сказать вам, что это неверный URL.
Однако я не думаю, что это нужно.
Необходимо открыть порты маршрутизатора только для IPN, потому что перенаправление в нормальном потоке является обычным заголовком «Location:», следовательно, ваш браузер должен иметь доступ к сайту (localhost)
Ну, это больше всего работает, но также вы можете настроить временную локальную запись dns. Все, что вам нужно сделать, это:
Поэтому, когда ваш запрос браузера на веб-сайт будет извлечен из вашего 127.0.0.1, вам понадобится очистить dns (перезапуск /etc/init.d/nscd).
и это все, но не забудьте удалить запись, когда вы будете готовы к производству.
Чтобы использовать IPN, ваш локальный хост должен быть доступен из Интернета. Одним из решений, которое определенно работает, является использование виртуальной машины, установка VPN-сервера, подключение вашего Clinet через VPN и управление виртуальным хостом для перенаправления на ваш локальный IP-адрес. Таким образом, если вы включите VPN, ваш сервер будет доступен извне, а IPN может быть отправлен.