مشكلة Magento EE PayPal IPN:PHP خطأ فادح:استدعاء وظيفة عضو save() على غير كائن في التطبيق/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