2011-09-30 91 views
12

当在magento中使用paypal进行订购时,它会带您到paypal,paypal已经显示一个确认,您确认,您将重定向到另一个确认页面(/ paypal /这是一个额外的步骤,对用户体验来说是不必要的,我想删除它并在用户在PayPal页面上确认时自动下订单,一旦离开PayPal,如果订单成功,客户应该看到成功页面。Magento:简单的方法来删除“PayPal /快递/审查”步骤

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

+3

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

+0

谢谢!我没有注意到这一点。现在我做了。 –

+0

这解决了你的问题? –

回答

9

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

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

+1

嗨,我检查了Magento CE 1.9中的PayPal express设置,但找不到禁用评论页面的设置。你指的是哪种配置? –

+0

@AnnaVölkl'付款/ paypal_express/skip_order_review_step' – Simon

+1

@AnnaVölkl我想这不起作用,如果你有协议启用,必须被接受... – Simon

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模块没有提供所有这些选项,则需要对其进行扩展并在自己中构建它们。不过,我很喜欢它。

+0

我将继续并为此构建对Magento EC模块的扩展,然后我将在MagentoConnect上免费发布它。希望能在几周内完成。只需要花时间。 –

+0

你有没有得到这个或有一个Github分支拉? – thindery

+0

我开始了,但还没有完成。不过,看起来这里还有其他一些好的答案。 –

7

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

反正这样做的正确方法是要 \程序\代码\核心\法师\宝\型号\ config.php文件,以 getExpressCheckoutEditUrl($token)方法,改变

'useraction' => 'continue', 

'useraction' => 'commit’. 

要在Paypal Express中确认用户页面,您只需更改控制器操作中的一行。 转到法师/贝宝/控制器/快递/抽象.php和搜索$this->_redirect('*/*/review');在returnAction()。在那里,你必须改变

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

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

这样,当贝宝返回,返回你避免以显示整个浏览页面和支付被自动确认动作。所以,PayPal像PayPal Standard方法一样再次重定向到成功页面。

4

@Toni重定向url部分效果很好,谢谢!然而,将“继续”更改为“提交”并不会更改PayPal网站上的按钮。但是,我可以通过执行以下操作来修复它:在Toni指示更改继续提交的getExpressCheckoutEditUrl函数的正上方,具有函数getExpressCheckoutStartUrl。如果你在那里添加使用变量,它将起作用。 原始功能:

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'=> '提交',在新的功能中的溶液。这应该工作!

9

所以合适的交易存在,完美的作品(对我来说)是从上面的一个总结:

1.转到: \程序\代码\核心\法师\宝\控制器\快递\ Abstract.php

returnAction(搜索)为:

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

有你有改变:

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

到:

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

2.转到: \应用\代码\核心\法师\贝宝\模型\ 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结帐的评论页面。

+0

+1对你感谢,它完美的作品 –

+1

谢谢你克里尔沙阿。我正在寻找它几天...并且我从Toni + David在这里找到了解决方案,所以我为更清晰和更好的解决方案做了一笔总和。传播它:) –

+0

实际上,我也在寻找几个小时,你的解决方案完美的工作 –

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

有了你仍然会被带到浏览页面,并必须同意的条款和条件,以避免这一点去上述两个变化:

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

唯一的一次,你会被每一个采取在浏览页面是,如果客户贝宝返回一个错误拒绝。

11

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

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

  1. 创建一个模块(在我exampe:Avoe_Paypal),包括改变
  2. 重写宝配置
  3. 重定向PayPal快速回顾step 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 '提交':

<?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

+0

您链接的扩展程序完美无缺。非常感谢!! – Avision

+1

在我的情况下genearates与onepage结帐生成一个循环,从我的网站到PayPal产生多次失败,可能我使用的是magento的其他版本的paypal –

+0

@ open-ecommerce.org我解决了这个问题[这里](https:// github.com/magento-hackathon/Sandfox_RemovePaypalExpressReviewStep/pull/4) – Simon

1

Magento的1.9内置了这种支持,在跳命令检查步骤选择,但它有一个微妙的警告。该功能不适用于您可以在产品详细信息和购物车页面上显示的“快捷方式”按钮。

我的建议,禁用快捷按钮并启用Skip Order Review步骤选项。对于额外的信用,您可以重新排列Onepage结帐流程,以便客户不必两次输入结算信息(一次在Magento上,再次在PayPal上输入)。

更多详细信息请参阅this blog post