微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Magento 1.9.3未捕获的错误:在布尔Payment / Model / Observer.php上调用成员函数getMethodInstance

如何解决Magento 1.9.3未捕获的错误:在布尔Payment / Model / Observer.php上调用成员函数getMethodInstance

我正在使用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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。