Интеграция PayPal с корзиной на основе iframe
Мы используем PayPal Payments Pro NVP API, чтобы обеспечить бесперебойную обработку кредитных карт и PayPal на нашем сайте. Мы создали виджет корзины на основе iframe, который наши клиенты размещают на своем сайте, чтобы их пользователи могли покупать товары и оплачивать их через нашу учетную запись Paypal.
Несмотря на то, что транзакции по кредитным картам работают нормально, мы видим проблемы, когда пользователь пытается расплатиться своей учетной записью PayPal. API использует перенаправление при нажатии на логотип PayPal, но затем кажется, что код PayPal запускает скрипт удаления фрейма, и транзакция не может быть продолжена.
Я ищу предложения или пример кода для работы с пользователями, желающими оплатить через PayPal через iframe. Один из вариантов - открыть новое окно, но тогда оно оставляет дизайн открытым для проблем, так как пользователь может переключаться между этим окном и окном, содержащим iframe, и, возможно, синхронизировать корзину с тем, что отображается в окне PayPal.
3 ответа
Оба приведенных выше ответа верны. Однако техническая поддержка PayPal предоставила более подробный набор инструкций, которые я предоставил ниже. Надеюсь, они помогут кому-то еще.
Измените ваши вызовы SetExpressCheckout так, чтобы параметры RETURNURL и CANCELURL указывали на специальную страницу возврата, которая будет обрабатывать закрытие всплывающего окна для вас и продолжение обычного процесса проверки (подробнее об этом позже).
Затем измените скрипт, который перенаправляет покупателя на сайт PayPal. Обычно этот сценарий возвращает браузеру ответ "302 найдено" (или аналогичный), сообщающий браузеру, что он должен выполнить перенаправление на какую-либо другую страницу. (В PHP это обычно выполняется с помощью функции "header" - например, header(“Location: https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=$token”);
.) Вместо этого этот скрипт должен выдавать следующий код HTML/JavaScript (заменив "TOKEN" на токен, полученный вами от PayPal). Откроется всплывающее окно, в котором покупатель может продолжить процесс оплаты в PayPal. Вы можете вставить дополнительный текст, если хотите, чтобы указать покупателю, что он должен использовать всплывающее окно, чтобы завершить оформление заказа. Чтобы избежать проблем с блокировщиками всплывающих окон, вы можете создать на своей странице ссылку или кнопку, указывающую покупателю, что для продолжения нажмите ссылку / кнопку, и используйте этот код для обработчика объекта "onClick".
<script type="text/javascript">
window.open("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=TOKEN","_blank","width=1024,height=768,location=1,resizable=1,scrollbars=1,status=1",true);
</script>
Теперь создайте новую страницу, которая выполняет следующий код (или аналогичный - этот код основан на PHP, при необходимости настройте его для любого языка, который вы используете). Этот код закроет всплывающее окно и продолжит процесс оформления заказа в существующем iframe. Параметр RETURNURL вашего вызова SetExpressCheckout должен указывать на эту страницу. Замените "paypalreturn.php" сценарием, который вы в настоящее время используете для обработки покупателей, возвращающихся в вашу корзину из PayPal.
<html>
<body>
<script type="text/javascript">
window.opener.location="http://www.regattacentral.com/paypalreturn.php?token=<? echo $_REQUEST["token"]; ?>&PayerID=<? echo $_REQUEST["PayerID"]; ?>";
window.close();
</script>
</body>
</html>
Наконец, повторите этот шаг для вашего обработчика CANCELURL.
• Покупка завершается внутри iframe, и отображается идентификатор транзакции для покупки.
PayPal Express Checkout / "Pay with PayPal" в Pro Hosted не поддерживает фреймы из соображений безопасности. Открытие всплывающего окна (или установка target=_parent) - единственный способ правильно обработать это.