Pregunta

En primer lugar, te explicaré sobre la funcionalidad de actuar:

  1. Compras del cliente en la tienda a través de PayPal
  2. Los operadores de taller llaman al pedido de un software externo (WAWI; no sé en EN) y el software establece el estado de pedido para completar
  3. Los operadores de la tienda recolectan el dinero en PayPal, según su cuenta de vendedor, del cliente
  4. Después de eso, PayPal envía después de un tiempo una solicitud automática de IPN de regreso a Magento y configure el pedido de nuevo a Pendiente

La cuestión es evitar que PayPal (o el modelo IPN) establezca el pedido del estado terminado a pendiente.

Ya hicimos algunas modificaciones en la clase: Mage_Paypal_Model_IPn en Mage/PayPal/Model/Ipn.php. En mi opinión, hay el código responsable en _RegisterPaymentCapture (). Aquí están nuestras ediciones (marcadas con edición):

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

El problema sigue ahí y no sé dónde editar el archivo para evitar cambios en el estado del pedido.

salud y gracias de antemano

¿Fue útil?

Solución

Lo logramos. El problema era que el software ERP que el estado de pedido no estableció, solo el estado, por lo que la condición no se agitaba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top