Magento: простой способ удалить шаг «PayPal / Экспресс / Обзор» - PullRequest
13 голосов
/ 30 сентября 2011

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

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

Ответы [ 8 ]

12 голосов
/ 14 января 2013

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

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

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

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

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

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

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

11 голосов
/ 03 декабря 2014

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

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

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

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

Avoe / Paypal / etc / 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>

app / etc / 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) Переписать config, добавить 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

9 голосов
/ 28 января 2014

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

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,
    ));
}

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

9 голосов
/ 30 сентября 2011

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

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

7 голосов
/ 21 ноября 2013

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

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

'useraction' => 'continue',

до

'useraction' => 'commit’.

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

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

до

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

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

4 голосов
/ 30 ноября 2013

@ Тони Часть URL перенаправления работает отлично, спасибо!Однако изменение «продолжить» на «зафиксировать» не изменило кнопки на веб-сайте PayPal.Однако я смог это исправить, выполнив следующие действия: Прямо над функцией getExpressCheckoutEditUrl, где Тони дал указание изменить продолжение коммита, есть функция 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', добавленное в новую функцию.Это должно работать!

2 голосов
/ 22 ноября 2014

Не хватило одного шага, позвольте мне снова подвести итог всего процесса.

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. С двумя вышеуказанными изменениями вы все равно будете перенаправлены на страницу обзора и должны согласиться с условиями, чтобы избежать этого:

/ приложение / код / ​​ядро ​​/ Mage / Paypal / контроллер / Экспресс / 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 возвращает отклоненную ошибку.

1 голос
/ 06 мая 2015

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...