مشكلة Magento EE PayPal IPN:PHP خطأ فادح:استدعاء وظيفة عضو save() على غير كائن في التطبيق/code/core/Mage/Paypal/Model/Ipn.php على السطر 532
-
12-12-2019 - |
سؤال
لقد تلقينا بريدًا إلكترونيًا من 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()
طريقة.يتم استبدال هذا عادةً بواسطة ملحقات الطرف الثالث التي تتعامل مع رسائل البريد الإلكتروني الخاصة بالمعاملات.تحقق مما إذا كان لديك أي امتداد يفعل ذلك ومعرفة ما إذا كان يمكنك تعطيله للاختبار.