Magento:轻松删除“paypal / express / review”步骤

时间:2011-09-30 07:23:13

标签: php magento paypal

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

对于我可能忽略的任何简单解决方案,或者至少如果你能指出我正确的方向去除那一步。

8 个答案:

答案 0 :(得分:12)

实际上,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模块没有为所有这些提供选项,您需要扩展它并自己构建它们。不过,我很喜欢它。

答案 1 :(得分:11)

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

您需要为清洁解决方案

做些什么
  1. 创建一个模块(在我的例子中:Avoe_Paypal)以包含更改
  2. 重写Paypal配置
  3. 重定向paypal快速审核步骤http://yourdomain.com/paypal/express/review/
  4. 1)创建模块

    Avoe /贝宝的/ 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>
    

    应用程序的/ 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)重写配置,添加使用'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

答案 2 :(得分:9)

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

编辑:现在可配置为1.9,仍然是延迟但可行的。

答案 3 :(得分:9)

那么合适的交易,对我来说是完美的(对我而言)是上述的总结:

<强> 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中跳过评论页面。

答案 4 :(得分:7)

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

无论如何,正确的方法是这样做 \ 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标准方法相同的方式重定向到成功页面。

答案 5 :(得分:4)

@Toni重定向网址部分非常好,谢谢!但是,将“继续”更改为“提交”并未更改PayPal网站上的按钮。但是,我能够通过执行以下操作来修复它:在getExpressCheckoutEditUrl函数正上方,Toni指示更改继续提交,有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'=&gt; 'commit',在新功能中添加了。这应该有效!

答案 6 :(得分:2)

缺少一步让我再次总结整个过程。

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返回拒绝错误。

答案 7 :(得分:1)

Magento 1.9内置支持跳过订单审核步骤选项,但它有一个微妙的警告。该功能不适用于&#39; Shortcut&#39;您可以在产品详细信息和购物车页面上显示的按钮。

我的建议是,禁用快捷按钮并启用跳过订单查看步骤选项。如需额外信用,您可以重新安排Onepage Checkout流程,以便客户不必输入两次结算信息(一次在Magento上,另一次在PayPal上)。

this blog post中提供了更多详细信息。