问题描述
我正在使用Magento 1.9.3版和CCAvenue的付款网关。
在结帐并成功付款时,从CCAvenue返回网站时。我收到此错误而不是成功付款:
Fatal error: Uncaught Error: Call to a member function getMethodInstance() on boolean in app/code/core/Mage/Payment/Model/Observer.php:46 Stack trace:
#0 app/code/core/Mage/Core/Model/App.php(1358): Mage_Payment_Model_Observer->salesOrderBeforeSave(Object(Varien_Event_Observer))
#1 app/code/core/Mage/Core/Model/App.php(1337): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Payment_Model_Observer),'salesOrderBefor...',Object(Varien_Event_Observer))
#2 app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('sales_order_sav...',Array)
#3 app/code/core/Mage/Core/Model/Abstract.php(391): Mage::dispatchEvent('sales_order_sav...',Array)
#4 app/code/core/Mage/Sales/Model/Order.php(2117): Mage_Core_Model_Abstract->_beforeSave()
#5 app/code/core/Mage/Core/Model/Abstract.php(316): Mage_Sales_Model_Order-> in app/code/core/Mage/Payment/Model/Observer.php on line 46
到目前为止,我在Google上搜索了解决方案,并尝试了以下几种方法:
$payment = $order->getPayment();
if(!isset($payment)) {
return $this->_redirect('checkout/cart');
}
使用此解决方案,我可以返回结帐/购物车,但收到无效访问的消息。成功完成订单并在所有情况下都扣除了付款。
我还检查了日志,但是我无法跟踪和纠正任何问题,仅供参考,这是与之相关的日志:
Stack trace:
#0 app/code/core/Mage/Core/Model/App.php(1358): Mage_Payment_Model_Observer->salesOrderBeforeSave(Object(Varien_Event_Observer))
#1 app/code/core/Mage/Core/Model/App.php(1337): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Payment_Model_Observer),Array)
#4 app/code/core/Mage/Sales/Model/Order.php(2117): Mage_Core_Model_Abstract->_beforeSave()
#5 app/code/core/Mage/Core/Model/Abstract.php(316): Mage_Sales_Model_Order-> in app/code/core/Mage/Payment/Model/Observer.php on line 46
解决方法
在未正确加载订单对象时会发生这种情况。 在这种情况下,加载订单对象时会丢失会话中的“订单ID”。
在 CcavenuepayController.php 中,响应处理程序功能
搜索
$order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
替换为
$order = Mage::getModel('sales/order')->loadByIncrementId($response_array['order_id']);
我们将会话订单ID替换为ccavenue响应订单ID。