在我正在构建的使用 Authorize.net Direct Post 作为付款方式的网站中,我遇到了一个问题,即在成功完成订单后购物车不会被停用。在 Mage_Authorizenet_Model_Directpost 中,作为订单授权步骤的一部分,我能够确认报价在第 574 行被停用。
Mage::getModel('sales/quote')
->load($order->getQuoteId())
->setIsActive(false)
->save();
但是,在 directpost.js 中,当 Authorize.net 加载 IFrame 并调用 returnQuote 函数时,它会重定向到 Mage_Authorizenet_Directpost_PaymentController 的 returnQuoteAction 调用 _returnCustomerQuote 函数。
if ($order->getId()) {
$quote = Mage::getModel('sales/quote')
->load($order->getQuoteId());
if ($quote->getId()) {
$quote->setIsActive(1)
->setReservedOrderId(NULL)
->save();
$this->_getCheckout()->replaceQuote($quote);
}
$this->_getDirectPostSession()->removeCheckoutOrderIncrementId($incrementId);
$this->_getDirectPostSession()->unsetData('quote_id');
if ($cancelOrder) {
$order->registerCancellation($errorMsg)->save();
}
}
请注意,报价再次被设置为活动状态。我不知道他们为什么这样做,除非订单被取消。我在想,也许我在这里的逻辑中遗漏了一些东西。我们已经做了一些单页结账定制和一些实际订单提交的定制,但我没有看到任何会影响这一点的东西。Magento 是否期望该报价稍后会在调用链中被禁用?我很难调试这个,因为我无法单步执行代码,因为 Authorize.net Direct Post 不会将响应转发回我的本地。
感谢您提供的任何帮助。