Модель PayPal IPN и автоматически заказать изменения состояния

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

Вопрос

Прежде всего я объясню вам о функциональности Actuall:

  1. Клиент покупает в магазине через PayPal
  2. Операторы магазинов вызывает заказ из внешнего программного обеспечения (WAWI; не знаю в EN), а программное обеспечение устанавливает состояние заказа на завершение
  3. Операторы магазинов собирают деньги в PayPal, на основе своего счета продавца, от клиента
  4. После этого PayPal отправляет через некоторое время автоматический запрос IPN обратно в Magento и устанавливает заказ на ожидание

Дело в том, чтобы не допустить, чтобы PayPal (или IPN Model) установил заказ от состояния, завершенного до ожидания.

Мы определили некоторые изменения в классе: mage_paypal_model_ipn в Mage/Paypal/Model/ipn.php. На мой взгляд, есть ответственный код в _registerPaymentCapture (). Вот наши изменения (отмечены редактированием):

 if ($this->getRequestData('transaction_entity') == 'auth') {
        return;
    }
    $this->_importPaymentInformation();
    $payment = $this->_order->getPayment();

    /* Edit: check if order state is complete */
    $orderStateComplete = (Mage_Sales_Model_Order::STATE_COMPLETE == $this->_order->getState());

    $orderStatusBefore = $this->_order->getStatus();
    $payment->setTransactionId($this->getRequestData('txn_id'))
        ->setPreparedMessage($this->_createIpnComment(''))
        ->setParentTransactionId($this->getRequestData('parent_txn_id'))
        ->setShouldCloseParentTransaction('Completed' === $this->getRequestData('auth_status'))
        ->setIsTransactionClosed(0)
        ->registerCaptureNotification($this->getRequestData('mc_gross'));

    /* Edit: reset state and status, if order was already complete before */
    if ($orderStateComplete) {
        $this->_order->setState(Mage_Sales_Model_Order::STATE_COMPLETE)
            ->setStatus($orderStatusBefore);
    }
    $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();
    }

Проблема все еще существует, и я не знаю, где отредактировать файл, чтобы предотвратить изменения состояния порядка.

Greetz & спасибо заранее

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

Решение

Мы справились с этим. Проблема заключалась в том, что программное обеспечение ERP, которое состояние заказа не установило, только статус, поэтому условие не сорвалось.

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