Могу ли я проверить PayPal API от локального хоста - PullRequest
20 голосов
/ 01 апреля 2011

ОБНОВЛЕНИЕ 1:

Согласно этому руководству на Используя уведомление PayPal о мгновенных платежах с PHP , PayPal не может получить доступ к локально размещенным веб-сайтам, если не открыты определенные порты маршрутизатора. Это потому, что на сайте примерно IPN или это правда для всех API PayPal?

ОРИГИНАЛЬНЫЙ ВОПРОС:

На моем ноутбуке у меня настроена среда LAMP, когда я использую http://localhost для создания веб-сайта перед началом работы.

Для нового проекта мне нужно использовать API PayPal. Смогу ли я использовать localhost для тестирования API PayPal, если я подключу свой ноутбук к Интернету? Или мне придется загружать свой сайт на хост LAMP в другом месте?

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

Ответы [ 7 ]

18 голосов
/ 17 июля 2012

Если вы хотите отладить свой 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"
7 голосов
/ 24 января 2015

Одно простое решение описано на официальной странице разработчиков 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>

Чтобы получить реальные результаты, вам необходимо скопировать все переменные IPN, которые отправляет PayPal.Эти реальные переменные можно найти в учетной записи PayPal в разделе «История IPN»:

История IPN *

Необходимо щелкнуть соответствующий идентификатор сообщения и скопировать «IPN».Содержимое сообщения (это будет что-то вроде mc_gross = 27.00 & invoice = Test-1 & protection_eligibility = Inelitable & ...), которое должно быть преобразовано в скрытые поля ввода HTML.Например:

<input type="hidden" name="mc_gross" value="27.00"/>
<input type="hidden" name="invoice" value="Test-1"/>
<input type="hidden" name="protection_eligibility" value="Ineligible"/>

....

После настройки всех этих переменных и изменения URL-адреса действия вы можете открыть файл в браузере и затем отправить эту форму.

5 голосов
/ 06 мая 2012

Если http://localhost не подтверждает использование http://127.0.0.1

4 голосов
/ 01 апреля 2011

должно работать. Я сделал интеграцию платежей с PayPal в прошлом году, и он работал на localhost без проблем.

Используете ли вы песочницу PayPal для разработки? https://developer.paypal.com/

3 голосов
/ 01 апреля 2011

Он должен работать без проблем, однако он может стать придирчивым, если вы отправите «недействительные URL» для URL-адресов возврата и URL-адресов сообщений IPN. Это означает, что отправка http://localhost/cancelpaypal.php в качестве cancelURL может сказать вам, что это неверный URL.

Я, однако, не думаю, что это должно.

Необходимость открытия портов маршрутизатора потребуется только для IPN, поскольку перенаправление в обычном потоке является обычным заголовком «Location:», следовательно, именно ваш браузер должен иметь возможность доступа к сайту (localhost)

0 голосов
/ 09 января 2017

Ну, большинство работает, но вы также можете настроить временную локальную запись DNS. Все, что вам нужно сделать, это:

  1. откройте ваш / etc / hosts
  2. добавить новую запись: yourwebsite.com 127.0.0.1

Таким образом, когда ваш запрос браузера для веб-сайта будет получен из вашего 127.0.0.1, вам нужно будет сбросить dns (/etc/init.d/nscd restart).

и это все, но не забудьте удалить запись, когда будете готовы к производству.

0 голосов
/ 07 января 2012

Для использования IPN ваш локальный хост должен быть доступен из Интернета.Одно из решений, которое определенно работает, - это использовать виртуальную машину, установить VPN-сервер, подключить Clinet через VPN и управлять виртуальным хостом для перенаправления на локальный IP-адрес.Таким образом, если вы включите VPN, к вашему серверу можно будет обращаться извне и отправлять IPN.

...