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



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

是否有任何简单的解决方案来解决这个问题,我可能已经忽略了,或者至少如果你能给我指出正确的方向来删除这一步。

实际上,Express Checkout可以处理这个问题,我个人建议坚持使用它。

SetExpressCheckout请求后,您将用户重定向到PayPal。你可以在这个URL后面加上useraction=commit来触发PayPal页面的确认。

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

您仍然需要在服务器上调用DoExpressCheckoutPayment来完成该过程,但是此时GetExpressCheckoutDetails是可选的。当使用useraction=commit时,你会在你的ReturnURL中得到PayerID作为URL参数,所以如果你不想/需要的话,你不必调用GECD。

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

这些特性的引入是为了做你所指定的…消除额外的审查过程。

话虽如此,如果Express Checkout的Magento模块没有提供所有这些选项,您需要扩展它并自己构建它们。不过我觉得它很有用。

实际上这里提到的所有解决方案都需要编辑Magento核心。这就是所谓的坏做法,并不能使您的商店保持更新。

你需要做什么来获得干净的解决方案:

    创建一个模块(在我的例子中:Avoe_Paypal)来包含
  1. 重写Paypal配置
  2. 重定向paypal express审核步骤http://yourdomain.com/paypal/express/review/
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)重写配置,添加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

不要使用paypal express和使用paypal标准,如果你不需要这个功能。Paypal express是结账方式而不是付款方式

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

所以正确的交易,这对我来说是完美的,从上面总结:

1。进入: appcodecoreMagePaypalControllerExpressAbstract.php

并在中搜索returnAction() for:

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

你必须改变:

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

:

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

2。进入: appcodecoreMagePaypalModelConfig.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。

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

不管怎样,正确的方法是核心代码 app 法师贝宝模型 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标准方法相同。

@Toni重定向url部分工作很好,谢谢!然而,将"继续"改为"提交"并没有改变PayPal网站上的按钮。但是,我能够通过执行以下操作来修复它:在getexpresscheckoutditurl函数的正上方,Toni指示更改继续提交,这里有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。转到:appcodecoreMagePaypalControllerExpressAbstract.php

和在returnAction()中搜索

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

你必须改变:

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

:

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

2。进入:appcodecoreMagePaypalModelConfig.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/代码/core/法师/贝宝/控制器/快递/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.’));
// }

唯一的时间,你将采取每一个评论页面是如果客户贝宝返回一个拒绝的错误。

Magento 1.9已经内置了这个支持,跳过订单审查步骤选项,但是它有一个微妙的警告。该功能不适用于产品详细信息和购物车页面上的"快捷键"按钮。

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

最新更新