Проблема с IPN Magento EE PayPal:Неустранимая ошибка PHP:Вызов функции-члена save() для объекта, не являющегося объектом, в app/code/core/Mage/Paypal/Model/Ipn.php в строке 532.

magento.stackexchange https://magento.stackexchange.com//questions/48343

Вопрос

Мы получили электронное письмо от PayPal, в котором сообщается, что наша страница IPN возвращает множество ошибок (500).Мы изучили различные журналы ошибок и обнаружили следующую ошибку в каталоге /var/log/nginx.Полный путь к каталогу был удален по понятным причинам.

PHP Fatal error:  Call to a member function save() on a non-object in app/code/core/Mage/Paypal/Model/Ipn.php on line 532"

Мы используем Magento Enterprise 1.13.0.2, и метод, содержащий строку 532, находится в следующей функции.

/**
 * Process completed payment (either full or partial)
 *
 * @param bool $skipFraudDetection
 */
protected function _registerPaymentCapture($skipFraudDetection = false)
{
    if ($this->getRequestData('transaction_entity') == 'auth') {
        return;
    }
    $parentTransactionId = $this->getRequestData('parent_txn_id');
    $this->_importPaymentInformation();
    $payment = $this->_order->getPayment();
    $payment->setTransactionId($this->getRequestData('txn_id'))
        ->setPreparedMessage($this->_createIpnComment(''))
        ->setParentTransactionId($parentTransactionId)
        ->setShouldCloseParentTransaction('Completed' === $this->getRequestData('auth_status'))
        ->setIsTransactionClosed(0)
        ->registerCaptureNotification(
            $this->getRequestData('mc_gross'),
            $skipFraudDetection && $parentTransactionId
        );
    $this->_order->save();

    // notify customer
    $invoice = $payment->getCreatedInvoice();
    if ($invoice && !$this->_order->getEmailSent()) {
        $this->_order->sendNewOrderEmail()->addStatusHistoryComment(
            Mage::helper('paypal')->__('Notified customer about invoice #%s.', $invoice->getIncrementId())
        )
        ->setIsCustomerNotified(true)
        ->save();
    }
}

Строка 532 — это метод save(), вызываемый в $this->_order->sendNewOrderEmail()....ближе к низу функции.Поскольку тестирование IPN в локальной среде невероятно сложно, мне было интересно, сталкивался ли кто-нибудь с этой ошибкой раньше?или смогут ли они указать мне правильное направление проблемы.

Это было полезно?

Решение

Поскольку ошибка появляется в ->save линия, это означает, что setIsCustomerNotified(true) не возвращается $this (текущий объект).
Единственное явление, setIsCustomerNotified Я нашел это в классе Mage_Sales_Model_Order_Status_History который возвращает return $this->setData('is_customer_notified', $flag);.

Этот setData метод должен возвращать текущий объект.
Поэтому что-то должно быть перезаписано в вашем экземпляре специальным модулем.
Либо setIsCustomerNotified метод или setData метод Mage_Sales_Model_Order_Status_History сорт.

Вот простой скрипт это может помочь вам найти переопределения в вашем экземпляре.Посмотрите в выводе что-то, связанное с Order или History.

Другие советы

Ваша проблема может быть в sendNewOrderEmail() метод.Обычно это перезаписывается сторонними расширениями, обрабатывающими транзакционные электронные письма.Проверьте, есть ли у вас какие-либо расширения, делающие это, и посмотрите, сможете ли вы отключить их для тестирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top