【问题标题】:Magento: easy way to remove "paypal/express/review" stepMagento:删除“paypal/express/review”步骤的简单方法
【发布时间】:2011-11-28 06:17:06
【问题描述】:

在magento中使用paypal订购时,它会带你到paypal,paypal已经显示确认,你确认,你会被重定向到另一个确认页面(/paypal/express/review),这是一个额外的步骤,对于用户体验,我想删除它并在用户在贝宝页面上确认时自动下订单,一旦离开贝宝,如果订单成功,客户应该会看到成功页面。

是否有任何简单的解决方案可以解决我可能忽略的问题,或者至少如果您能指出正确的方向来删除该步骤。

【问题讨论】:

  • 如果您不需要此功能,请不要使用 paypal express 并使用 paypal standard。 paypal express 是一种结帐方式,而不是付款方式
  • 谢谢!我没有注意到这一点。现在我知道了。
  • 是的,您可以将其发布为答案,我会选择它。再次感谢。

标签: php magento paypal


【解决方案1】:

如果您不需要此功能,请不要使用 paypal express 并使用 paypal 标准。 paypal express 是一种结帐方式,而不是付款方式

编辑:这现在可以在 1.9 中进行配置,仍然延迟但可行。

【讨论】:

  • 嗨,我检查了 Magento CE 1.9 中的 PayPal express 设置,但找不到禁用评论页面的设置。你指的是哪个配置?
  • @AnnaVölkl payment/paypal_express/skip_order_review_step
  • @AnnaVölkl 我想如果您启用了协议,它就不起作用,必须接受......
  • 在 1.9 中有一个选项,但它与“快捷按钮”不兼容 - more here
  • 请注意,不再支持 PayPal 标准,而 PayPal Express 是可行的方法。
【解决方案2】:

其实 Express Checkout 可以解决这个问题,我个人建议坚持使用。

在 SetExpressCheckout 请求之后,您将用户重定向到 PayPal。您可以将 useraction=commit 附加到此 URL 以触发来自 PayPal 页面的确认。

这会导致 PayPal 上的“继续”按钮切换到“支付”按钮,并通知用户这是他们的最终确认...点击“支付”将提交付款。

您仍然需要在服务器上调用 DoExpressCheckoutPayment 来完成该过程,但此时 GetExpressCheckoutDetails 是可选的。使用 useraction=commit 时,您将在 ReturnURL 中将 PayerID 作为 URL 参数返回,因此如果您不想/不需要,则不必调用 GECD。

您可以进一步进行这一切设置,并使用回调 API(也称为即时更新 API)将运费和销售税信息提供给 PayPal 审核页面。这允许您根据在 PayPal 评论页面上选择的用户送货地址,使用您自己的送货数据填充 PayPal 评论页面上的下拉值。

这些功能的引入是为了完全按照您的指定...消除额外的审查过程。

综上所述,如果用于 Express Checkout 的 Magento 模块没有为所有这些提供选项,您需要扩展它并自己构建它们。不过,我很漂亮。

【讨论】:

  • 我将继续为执行此操作的 Magento EC 模块构建一个扩展,我将在 MagentoConnect 上免费发布它。希望在几周内完成。只是要腾出时间。
  • 你有没有搞定这件事或者有一个 github 分支可以从中提取?
  • 我开始了,但还没有完成。不过,这里似乎还有其他一些很好的答案。
  • 现在支持 1.9,您可以跳过审查并从设置中调整它
  • 在 1.9 中有一个选项,但它与“快捷按钮”不兼容 - more here
【解决方案3】:

Andrew Angel 的回答确实没有避开确认页面,它只是将按钮值更改为“支付”而不是“确认”或类似的东西。

无论如何,正确的方法是 \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 标准方法一样。

【讨论】:

    【解决方案4】:

    @Toni 重定向网址部分效果很好,谢谢!然而,将“继续”更改为“提交”并没有改变 PayPal 网站上的按钮。但是,我可以通过执行以下操作来修复它: 在 Toni 指示更改继续提交的 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',已添加到新功能中。这应该可行!

    【讨论】:

      【解决方案5】:

      所以正确的交易,完美的工作(对我来说)是上面的总结:

      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 中的评论页面。

      【讨论】:

      • 谢谢 Keyur Shah。我搜索了几天......我从 Toni + David 那里找到了解决方案,所以我总结了一个更清晰和更好的解决方案。传播它:)
      • 实际上我也在寻找几个小时,您的解决方案完美运行
      • 对我来说,这个解决方案不起作用,仍然显示评论页面。
      • 这很好用,如果且仅当您在 magento 中启用了访客结帐,否则它会失败... :) 我也会编辑答案
      • 请不要编辑核心。这被认为是不好的做法,不会让您的商店保持更新。在这里查看我的答案:stackoverflow.com/a/27266232/865443
      【解决方案6】:

      这里少了一步,让我再总结一下整个过程。

      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.’));
      // }
      

      您将被带到评论页面的唯一时间是客户的贝宝返回拒绝错误。

      【讨论】:

        【解决方案7】:

        实际上这里提到的所有解决方案都需要编辑 Magento 核心。这被称为不良做法,不会让您的商店保持更新。

        干净的解决方案需要做什么:

        1. 创建一个模块(在我的示例中:Avoe_Paypal)以包含更改
        2. 重写 Paypal 配置
        3. 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) 重写配置,添加 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

        【讨论】:

        • @open-ecommerce.org 我解决了这个问题here
        • 扩展不工作,仍然重定向到paypal
        • @WasiqShahrukh:我们最近有一个类似的案例。 PayPal 集成似乎在最近的 Magento 版本中发生了变化(重定向到 PayPal 发生在在 Magento 下订单之前),您实际上需要审查步骤来完成订单。
        • @AnnaVölkl 确切地说,不,我正在寻找在这两个步骤之间切换,以便首先进行 ORDER 审核,然后是付款方式。如果你知道怎么做,请帮忙
        【解决方案8】:

        Magento 1.9 内置了对此的支持,即 Skip Order Review Step 选项,但它有一个微妙的警告。该功能不适用于您可以在产品详细信息和购物车页面上显示的“快捷方式”按钮。

        我的建议,禁用快捷按钮并启用跳过订单审核步骤选项。为了获得额外的信用,您可以重新安排 Onepage Checkout 流程,这样客户就不必输入两次帐单信息(一次在 Magento 上,一次在 PayPal 上)。

        更多详情请见this blog post

        【讨论】:

          猜你喜欢
          • 2015-08-07
          • 2015-06-11
          • 2013-05-27
          • 2012-07-28
          • 1970-01-01
          • 2012-08-29
          • 2019-04-23
          • 2017-09-28
          • 1970-01-01
          相关资源
          最近更新 更多