1

在 magento 上使用 paypal 时,有两个明确的选择,标准和快递。

实际上它们之间的差异非常令人困惑,但主要差异之一是贝宝标准在重定向到贝宝时立即完成订单,而快递没有。

这实质上意味着用户购物篮在转移到贝宝时使用贝宝标准清除,如果他们点击返回,他们将没有购物篮。

这发生在代码中的哪个确切点?

我可以在 magento 中看到两种付款方式:

app\code\core\Mage\Paypal\Model\Express.php

app\code\core\Mage\Paypal\Model\Standard.php

但我看不到magento允许快递在哪里保持订单

4

2 回答 2

7

Express和Standard之间的实际流程不同......

贝宝快递

选择付款方式后(显然是在订单完成之前),用户会被直接重定向到 PayPal。在授权使用 PayPal 付款后,他们返回网站完成订单。

贝宝标准

用户完成整个结帐过程并在现场完成订单。然后他们被重定向到 PayPal 以进行付款。他们不需要返回站点来完成订单,因为它在重定向到 PayPal 之前已经完成。这就是为什么无论您是否在 PayPal 付款,如果您返回网站,您都会看到空篮子 -报价已转换为订单。

所以从这个意义上说,PayPal express 本质上是一种结账方式,而 PayPal 标准是一种支付方式。


关于这一切发生在代码中的确切位置......

贝宝快递

使用在 Mage_Checkout_OnepageController的 savePayment() 操作中调用的 getCheckoutRedirectUrl() 方法-因此您在订单完成之前被重定向,如上所述。

贝宝标准

使用在 Mage_Checkout_Model_Type_Onepage 的saveOrder() 方法中调用的getOrderPlaceRedirectUrl()

请查看链接以获取所有发生的确切代码点。

于 2012-08-18T12:06:34.520 回答
-1

基于快速检查代码的部分答案,也许这至少会为您指明正确的方向。让我知道你发现了什么,我会尝试做一些额外的挖掘并提供更多细节。

// Mage_Paypal_StandardController
public function redirectAction()
{
    $session = Mage::getSingleton('checkout/session');
    $session->setPaypalStandardQuoteId($session->getQuoteId());
    $this->getResponse()->setBody($this->getLayout()->createBlock('paypal/standard_redirect')->toHtml());
    $session->unsQuoteId();
    $session->unsRedirectUrl();
}

请注意,在结帐/会话中未设置 quote_id。那可能会做到。

在 Express 控制器中,我看不到任何未quote_id设置的地方:

// Mage_Paypal_Controller_Express_Abstract
public function placeOrderAction()
{
    ...
}
于 2012-08-17T20:39:08.213 回答