当使用paypal在magento中订购时,它会将您带到paypal,paypal已经显示确认,您确认,您将被重定向到另一个确认页面(/ paypal / express / review),这是一个额外的步骤,不需要用户体验,我想删除它,并在用户在paypal页面上确认时自动下订单,一旦离开paypal,如果订单成功,客户应该看到成功页面。
对于我可能忽略的任何简单解决方案,或者至少如果你能指出我正确的方向去除那一步。
答案 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 /贝宝的/ 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中提供了更多详细信息。