Могу ли я протестировать PayPal API с локального хоста?

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

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

ИСХОДНЫЙ ВОПРОС:

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

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

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


person oshirowanen    schedule 01.04.2011    source источник
comment
Вы получаете код ошибки от PayPal? Какой набор API вы используете, ExpressCheckout?   -  person jishi    schedule 01.04.2011
comment
Я получаю сообщение типа apache о том, что веб-сайт (мой локальный хост) закрыт на техническое обслуживание...   -  person oshirowanen    schedule 01.04.2011
comment
Вы можете запустить скрипт для подделки IPN локально, который будет проверяться в песочнице PayPal. Это то же самое, что запустить их симулятор: симулятор в localhost"> stackoverflow.com/questions/11469636/   -  person user6972    schedule 28.08.2013


Ответы (7)


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

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

person Mihai Frentiu    schedule 01.04.2011
comment
Да, я настроил учетную запись песочницы и использовал учетные данные из учетной записи песочницы в коде, сгенерированном мастером интеграции PayPal Adaptive API. - person oshirowanen; 01.04.2011
comment
См. ОБНОВЛЕНИЕ 1: в исходном вопросе. - person oshirowanen; 01.04.2011
comment
убедитесь, что PayPal может получить доступ к сайту на вашем локальном хосте. это означает, что ваш сайт должен быть доступен с других компьютеров. - person Mihai Frentiu; 01.04.2011
comment
@Mihai Frentiu, ты уверен, что это необходимо? - person oshirowanen; 01.04.2011
comment
Да, потому что в песочнице PayPal (например) вы должны указать URL-адрес обработчика IPN. Paypal использует этот URL-адрес для вызова php-файла на вашем веб-сайте, который обрабатывает вызов IPN. Таким образом, вы не можете перейти по этому URL-адресу localhost/yourwebsite/ipn_handler.php. Вам понадобится что-то вроде your_computer_public_ip/yourwebsite/ipn_handler.php. - person Mihai Frentiu; 01.04.2011
comment
Я скопировал и вставил файлы на свой рабочий сервер, и они заработали отлично. Так что это означает, что я не могу использовать свой локальный хост :(. - person oshirowanen; 01.04.2011
comment
По-видимому, это зависит от используемых вами методов API. Я совершаю прямые платежи по картам (метод DoDirectPayment), и он отлично работает на локальном хосте. - person Burjua; 12.11.2012
comment
У меня это не работает на локальном хосте (XAMPP). Я использую метод экспресс-оплаты. Однако это сработало, когда я разместил его на размещенном сервере, таком как 1&1. - person Daniel Harris; 05.01.2013
comment
Возможно, у вас возникли проблемы с маршрутизацией из-за того, что ваш провайдер блокирует порты. Попробуйте мое скриптовое решение здесь > stackoverflow.com/questions/11469636/ - person user6972; 28.08.2013

Если вы хотите отладить свой код 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"
person Brad Parks    schedule 17.07.2012

Одно простое решение описано на официальной странице разработчиков 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=Ineligible&...), которое необходимо преобразовать в скрытые поля ввода 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-адреса действия вы можете открыть файл в браузере, а затем отправить эту форму.

person Community    schedule 24.01.2015

Если http://localhost не проходит проверку, используйте http://127.0.0.1

person Mark Gia Bao Nguyen    schedule 06.05.2012
comment
Почему это не размечено, мне не понятно. Думаю, люди предпочитают бесполезные дикие чрезмерно сложные обходные пути чему-то простому. Спасибо, я знаю, что в какой-то момент у меня это было, и я забыл попробовать это. - person Shawn Rebelo; 02.12.2014
comment
Привет, Шон, я еще не пробовал, но любопытно. Итак, когда мы используем урну песочницы PayPal для тестирования платежей PayPal, вы говорите, что IPN песочницы PayPal должен иметь возможность достигать 127.0.0.1 т.е. моя локальная машина? Разве 127.0.0.1 не является общим IP-адресом домашней машины? - person rajugaadu; 08.11.2015
comment
Тем временем, я попробую это все же. - person rajugaadu; 08.11.2015
comment
Это должен быть правильный ответ (по крайней мере, для Express Checkout). Работает отлично. - person Bryan; 12.03.2020

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

Однако я не думаю, что это должно быть.

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

person jishi    schedule 01.04.2011

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

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

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

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

person jamesjara    schedule 09.01.2017
comment
Это делает localhost известным как yourwebsite.com на ВАШЕМ компьютере, но PayPal по-прежнему не знает, где найти yourwebsite.com. Другими словами: это не решает проблему. - person Robert Bethge; 06.06.2017
comment
для потока оформления заказа, используемого в примере владельца, Paypal ничего не делает с redirectUrl, он обрабатывает запрос и возвращает пользователя на redirectUrl, ничего больше. - person jamesjara; 12.07.2017
comment
Если используется клиентский поток, вам не нужно это доменное имя tmp. Можно также использовать IP-адрес. - person Sergio Tulentsev; 02.04.2018

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

person axroth    schedule 07.01.2012
comment
Нет абсолютно никакой причины использовать виртуальную машину или VPN. - person Brad; 28.10.2012