Magento EE PayPal IPN Problema: PHP Fatale Errore: chiamato a una funzione membro Salva () su un non oggetto in app / code / core / mage / paypal / modello / ipn.php on line 532

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

Domanda

Abbiamo ricevuto un'e-mail da PayPal che ci avvisa che la nostra pagina IPN sta restituendo un sacco di 500 errori.Abbiamo studiato i vari registri di errore e abbiamo trovato il seguente errore all'interno della directory / var / log / nginx.Il percorso completo della directory è stato rimosso per ovvi motivi.

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"
.

Stiamo funzionando Magento Enterprise 1.13.0.2 e il metodo che contiene la riga 532 si trova all'interno della seguente funzione.

/**
 * 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();
    }
}
.

Line 532 è il metodo Salva () chiamato il $ questo -> _ Order-> SendneworderEmail () .... verso il fondo della funzione.Dato che il test dell'IPN è ridicolmente difficile da un ambiente locale mi stavo chiedendo se qualcuno avesse incontrato questo errore prima?o se possono indicarmi nella giusta direzione del problema.

È stato utile?

Soluzione

Poiché l'errore viene visualizzato nella riga ->save, significa che setIsCustomerNotified(true) non restituisce $this (l'oggetto corrente).
L'unico caso di setIsCustomerNotified che ho trovato è nella classe Mage_Sales_Model_Order_Status_History che restituisce return $this->setData('is_customer_notified', $flag);.

Questo metodo setData dovrebbe restituire l'oggetto corrente.
Quindi qualcosa deve essere sovrascritto in tuo istanza da un modulo personalizzato.
Il metodo setIsCustomerNotified o il metodo setData della classe Mage_Sales_Model_Order_Status_History.

Ecco un semplice script che può aiutareTrovi le sostituzioni nell'istanza.Guarda nell'output per qualcosa relativo a Order o History.

Altri suggerimenti

Il problema potrebbe essere nel metodo sendNewOrderEmail().Questo di solito viene sovrascritto dalle estensioni di terze parti gestire le e-mail transazionali.Controlla se hai un'estensione che lo fa e vedi se riesci a disabilitarli per il test.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top