Интеграция PayPal с корзиной на основе iframe - PullRequest
5 голосов
/ 03 сентября 2011

Мы используем PayPal Payments Pro NVP API, чтобы обеспечить бесперебойную обработку кредитных карт и PayPal на нашем сайте. Мы создали виджет корзины на основе iframe, который наши клиенты помещают на их сайт, чтобы их пользователи могли покупать товары и оплачивать их через нашу учетную запись Paypal.

Несмотря на то, что транзакции с кредитными картами работают нормально, мы видим проблемы, когда пользователь пытается расплатиться своей учетной записью PayPal. API использует перенаправление при нажатии на логотип PayPal, но затем кажется, что код PayPal выполняет сценарий удаления фрейма, и транзакция не может быть продолжена.

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

Ответы [ 3 ]

6 голосов
/ 15 сентября 2011

Оба приведенных выше ответа верны.Однако техническая поддержка PayPal предоставила более подробный набор инструкций, которые я предоставил ниже.Надеемся, что они помогут кому-то еще.

Измените ваши вызовы SetExpressCheckout, чтобы параметры RETURNURL и CANCELURL указывали на специальную страницу возврата, которая будет обрабатывать закрытие всплывающего окна для вас и продолжение обычного процесса проверки (подробнееоб этом позже).

Затем измените скрипт, который перенаправляет покупателя на сайт PayPal.Обычно этот сценарий возвращает браузеру ответ «302 найдено» (или аналогичный), сообщающий браузеру, что он должен выполнить перенаправление на другую страницу.(В PHP это обычно выполняется с помощью функции «заголовка» - например, 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, и отображается идентификатор транзакции для покупки.

1 голос
/ 04 сентября 2011

PayPal Express Checkout / «Pay with PayPal» в Pro Hosted не поддерживает фреймы из соображений безопасности. Открытие всплывающего окна (или установка target = _parent) - единственный способ правильно обработать это.

0 голосов
/ 10 сентября 2011

Установите цель формы на - target = "_ top"

...