Magento: простой способ удалить шаг «paypal / express / review»

При заказе с использованием paypal в magento он берет вас на paypal, paypal уже отображает подтверждение, вы подтверждаете, что вы перенаправляетесь на другую страницу подтверждения (/ paypal / express / review), это дополнительный шаг, который не нужен для пользователей, Я хотел бы удалить его и сделать заказ автоматически, если пользователь подтвердит на странице PayPal, после того, как вы выходите из PayPal, если заказ удался, клиент должен увидеть страницу успеха.

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

не используйте paypal express и используйте стандарт paypal, если вам не нужна эта функция. paypal express – это метод выписки, а не способ оплаты

edit: теперь это настраивается в 1.9, все еще отстало, но выполнимо.

Фактически, Express Checkout может справиться с этим без проблем, и я лично рекомендую придерживаться его.

После запроса SetExpressCheckout вы перенаправляете пользователя в PayPal. Вы можете добавить useraction = commit к этому URL-адресу, чтобы инициировать подтверждение с страниц PayPal.

Это приводит к тому, что кнопка «Продолжить» в PayPal переключается на кнопку «Оплатить» и информирует пользователя о том, что это их окончательное подтверждение … щелчок «Плата» отправит платеж.

Вы все равно должны вызвать DoExpressCheckoutPayment на своем сервере для завершения процесса, но GetExpressCheckoutDetails является необязательным на данный момент. При использовании useraction = commit вы вернете PayerID в качестве параметра URL в вашем возврате, так что вам не нужно вызывать GECD, если вам это не нужно.

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

Введение этих функций состояло в том, чтобы сделать именно то, что вы указали … устранить дополнительный процесс обзора.

Все это говорит о том, что если модуль Magento для Express Checkout не предоставляет варианты для всего этого, вам нужно будет его расширить и построить самостоятельно. Хотя я все равно.

Фактически все решения, упомянутые здесь, необходимы для редактирования ядра Magento. Это называется плохой практикой и не позволяет обновлять ваш магазин.

Что вам нужно сделать для чистого решения :

  1. Создайте модуль (в моем примере: Avoe_Paypal), чтобы включить изменения
  2. Переписать настройку Paypal
  3. Перенаправление на этапе экспресс-проверки PayPal, который является http://yourdomain.com/paypal/express/review/

1) Создайте свой модуль

Avoe / Paypal / и т.д. / config.xml

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Avoe_Paypal> <version>0.1.0</version> </Avoe_Paypal> </modules> <global> <models> <Avoe_Paypal> <class>Avoe_Paypal_Model</class> </Avoe_Paypal> <paypal> <rewrite> <config>Avoe_Paypal_Model_Config</config> </rewrite> </paypal> </models> <events> <controller_action_predispatch_paypal_express_review> <observers> <avoe_paypal_predispatch> <type>singleton</type> <class>Avoe_Paypal_Model_Observer</class> <method>paypalExpressReturnPredispatch</method> </avoe_paypal_predispatch> </observers> </controller_action_predispatch_paypal_express_review> </events> </global> </config> 

приложение / и т.д. / Avoe_Paypal.xml

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Avoe_Paypal> <active>true</active> <codePool>local</codePool> <depends> <Mage_Paypal /> </depends> </Avoe_Paypal> </modules> </config> 

2) Перепишите конфигурацию, добавьте useraction 'commit':

 <?php class Avoe_Paypal_Model_Config extends Mage_Paypal_Model_Config { /** * Get url for dispatching customer to express checkout start * Added useraction 'commit' to remove PayPal Express Checkout review page * * @param string $token * @return string */ public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } } 

3) Создайте наблюдателя для перенаправления:

 <?php class Avoe_Paypal_Model_Observer { function paypalExpressReturnPredispatch($observer) { Mage::app()->getResponse()->setRedirect(Mage::getUrl('*/*/placeOrder')); } } 

Существует также небольшое расширение Magento, которое только что было выпущено вчера, чтобы удалить шаг обзора:

https://github.com/tim-bezhashvyly/Sandfox_RemovePaypalExpressReviewStep

Итак, правильная сделка там, которая отлично работает (для меня), является суммой выше:

1. Перейдите по адресу: \ app \ code \ core \ Mage \ Paypal \ Controller \ Express \ Abstract.php

и искать в returnAction () для:

 $this->_redirect('*/*/review'); 

Там вам нужно изменить:

 $this->_redirect('*/*/review'); 

чтобы:

 $this->_redirect('*/*/placeOrder'); 

2. Перейдите в: \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php и измените:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'token' => $token, )); } 

чтобы:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } 

С приведенными выше 2 изменениями я выясню, как пропустить страницу обзора в Magento Paypal Express Checkout.

Ответ Эндрю Ангела действительно не избегает страницы подтверждения, это просто изменяет значение кнопки, чтобы «заплатить», а не «Подтвердить», или что-то в этом роде.

В любом случае правильный способ сделать это – \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php , getExpressCheckoutEditUrl($token) и изменить

 'useraction' => 'continue', 

в

 'useraction' => 'commit'. 

Для пользовательской страницы подтверждения aviod в Paypal Express вам нужно только изменить одну строку в действии контроллера. Перейдите в Mage / Paypal / Controller / Express / Abstract.php и найдите $this->_redirect('*/*/review') ; in returnAction() . Там вам нужно изменить

 $this->_redirect('\*/\*/review'); 

в

 $this->_redirect('\*/\*/placeOrder'); 

Таким образом, когда paypal возвращается к возврату, вы избегаете показывать всю страницу обзора, и платеж автоматически подтверждается. Таким образом, Paypal перенаправляет снова страницы успеха так же, как метод PayPal Standard.

@Toni. Ссылка на URL-адрес перенаправления работает отлично, спасибо! Однако изменение «continue» на «commit» не изменило кнопки на веб-сайте PayPal. Тем не менее, я смог исправить это, выполнив следующее: прямо над функцией getExpressCheckoutEditUrl, где Тони дал указание изменить продолжение на фиксацию, есть funciton getExpressCheckoutStartUrl. Если вы добавите переменную useraction, она будет работать. Исходная функция:

 public function getExpressCheckoutStartUrl($token) { 'return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'token' => $token, )); } 

Новая функция:

 public function getExpressCheckoutStartUrl($token) { 'return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } 

Обратите внимание на 'useraction' => 'commit', был добавлен в новую функцию. Это должно сработать!

Произошел один шаг, и я снова подведу итог всему процессу.

1. Перейдите по адресу: \ app \ code \ core \ Mage \ Paypal \ Controller \ Express \ Abstract.php

и искать в returnAction () для:

 $this->_redirect('*/*/review'); 

Там вам нужно изменить:

 $this->_redirect('*/*/review'); 

чтобы:

 $this->_redirect('*/*/placeOrder'); 

2. Перейдите в: \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php и измените:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'token' => $token, )); } 

чтобы:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } 

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

/app/code/core/Mage/Paypal/Controller/Express/Abstract.php Искать:

 public function placeOrderAction() { try { $requiredAgreements = Mage::helper('checkout')->getRequiredAgreementIds(); if ($requiredAgreements) { $postedAgreements = array_keys($this->getRequest()->getPost('agreement', array())); if (array_diff($requiredAgreements, $postedAgreements)) { Mage::throwException(Mage::helper('paypal')->__('Please agree to all the terms and conditions before placing the order.')); } } 

Прокомментируйте следующие строки с простым // в начале:

 //if (array_diff($requiredAgreements, $postedAgreements)) { // Mage::throwException(Mage::helper('paypal')->__('Please agree to all the terms and conditions before placing the order.')); // } 

Единственный раз, когда вы будете принимать участие на странице обзора, является то, что клиенты paypal возвращают отклоненную ошибку.

Magento 1.9 имеет встроенную поддержку для этого, шаг обзора пропущенного хода, но он имеет тонкое предостережение. Функция не работает с кнопками «Ярлык», которые вы можете отображать на страницах товара и в корзине.

Мое предложение, отключите кнопки быстрого доступа и включите опцию « Пропустить порядок проверки» . Для дополнительного кредита вы можете упорядочить поток Onepage Checkout, чтобы клиенты не могли дважды вводить платежную информацию (один раз на Magento и снова на PayPal).

Более подробная информация доступна в этом блоге .