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
-
12-12-2019 - |
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.
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.