PayPal -IPN -Modell und automatisch bestellen Statusänderungen
-
22-10-2019 - |
Frage
Zunächst werde ich Sie über die Aktuall -Funktionalität erklären:
- Kunde kauft im Laden über PayPal
- Ladenbetreiber rufen die Bestellung von einer externen Software an (Wawi; wissen nicht in EN) und die Software legt den Bestellstatus ab, um sie abzuschließen
- Ladenbetreiber sammeln das Geld bei PayPal, basierend auf ihrem Verkäuferkonto von Kunden
- Danach sendet PayPal nach einiger Zeit eine automatische IPN
Die Sache ist, PayPal (oder IPN -Modell) daran zu hindern, die Reihenfolge aus dem Zustand zurück zu auszulegen.
Wir haben einige Modifikationen an der Klasse vorgenommen: mage_paypal_model_ipn in mage/paypal/model/ipn.php. Meiner Meinung nach gibt es den zuständigen Code in _registerPaymentCapture (). Hier sind unsere Änderungen (mit Bearbeitung gekennzeichnet):
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();
}
Das Problem ist immer noch da und ich weiß nicht, wo ich die Datei bearbeiten soll, um Änderungen der Bestellstatus zu verhindern.
Begrüßung & danke im Voraus
Lösung
Wir haben es geschafft. Das Problem war, dass die ERP -Software, die der Bestellstatus nicht festgelegt hatte, nur den Status festgelegt hat, sodass die Bedingung nicht wokierte.